J'aimerais connaître les meilleures pratiques lors de la conception de classes C++. Pour mettre le contexte en contexte, j'ai une classe C++ nommée Vec3.Meilleures pratiques de classe C++
class Vec3{
private:
float elements[3];
public:
Vec3(Vec3 v1){...}
Vec3(int x, int y, int z){...}
Vec3 add(Vec3 v1){...}
Vec3 add(int x, int y, int z){...}
...
Vec3 multiply(Vec3 v1){...}
...
int dotProduct(Vec3 v1){...}
Vec3 normalize(){...}
....
int operator[](int pos){...}
};
Donc, j'ai cette classe qui fait le calcul sur un vecteur de taille 3. Je voudrais savoir ce qui est mieux. Travailler avec des pointeurs ou non. Dois-je retourner le pointeur et avoir mes paramètres comme pointeurs ou non.
vec3 ajouter (vec3 v1) ou vec3 * ajouter (vec3 v1) ou vec3 * ajouter (vec3 * v1) ou maintenant ....
Je suis confus, je ne sais pas si je devrais utilisez un pointeur ou pas dans ma classe. Je suppose qu'il ya toujours un moyen d'envoyer mes arguments à la fonction qui ne gère pas les pointeurs ...
Vec3* v2 = new Vec3(1,1,1);
Vec3 sum = v1.add(*v2);
Et il y a une solution qui est probablement le meilleur de tout ce que je peux venir avec .. ayant les deux fonctions
Vec3 add(Vec3 v2){...}
Vec3* add(Vec3* v2){...}
Mais je crains que cela conduise à un code en double et peut être en surcharge.
Merci pour les réponses ... btw, je pourrais utiliser un template pour changer la taille du Vector mais je préfère garder ma classe Vec3 seule et créer une classe Vec4 ou la nommer Quaternion.
EDIT Voici la solution que je suis venu avec. N'hésitez pas à commenter ou modifier ou réutiliser le code. Une chose. Je veux juste mentionner que, dans mon cas, cette classe est supposée être transparente. Tout comme nous ajoutons des chiffres. Si la surcharge d'ajout modifie l'objet appelant la fonction dans ce cas, i. Je finirais avec un k étant une référence à i et i étant égal à 25. Mais ce que nous voulons vraiment ici est un k égal à 25 et i, k inchangé.
Voilà comment fonctionne ma classe. Vec3 k = i + k ne modifiera ni i ni k car nous créons un nouveau nombre à partir de ces valeurs. Le seul cas où je renvoie une référence est + =, - =, ++, --..., set ([XYZ])? et normaliser.
Il pourrait être amusant de faire quelque chose comme myvec.setX (10) .normalize() échelle (10)
NOTE:. Échelle doit renvoyer une référence. Je ne l'ai pas vu mais je suppose que ça devrait être mieux ainsi.
Vec3 t = myvec.normalize().scale(100).copy();
Merci, je vais travailler sur la classe Matrix maintenant.
C'est exactement ce dont j'avais besoin. Je vous remercie. Je devrais utiliser davantage de références. :) –