Puisque j'ai en vain chercher en internet , et jai realisé que j'ai perdu beaucoup de temps jai decide decrire ce sujet puisque tout ce qui est en ligne me parait un peu complique :
A quoi sert new et this en C++
jai aussi besoin dexplication precise pour ce cas pour quon la vu en cours .
v = new double[dim]; // Ici ou on la utilise dans le constructeur dune classe( vec )
vec::~vec()
{
delete[] v;// Ici pourquoi on utilise delete[]
ifdef TEST // A quoi sert ifdef et apres endif
cout << "OK" << endl;
#endif
}
vec vec::operator+(const vec& b) const
{
if (dim != b.dim)
{
cerr << "les vecteurs nont pas la meme dimension" << endl;
abort();
}
vec erg(dim);
int i;
for (i = 0; i < dim; i++)
{
ergebnis.v[i] = v[i] + b.v[i];
return ergebnis;
}
jai compris la methode ci dessus mais pourquoi le prof ajoute ces methodes et il retourne *this ( est ce la precedente nest pas suffisante pour faire le travail ?)
vec vec::operator + () const
{
return *this;
}
/////////////////////
vec& vec::operator += (const vec& partiedroite)
{
if (dim != partiedroite.dim)
{
cerr<<"les vecteurs nont pas la meme dimensions"<<endl;
abort();
}
int i;
for (i=0; i<dim; i++)
v[i] += partiedroite.v[i];
return *this;
}
et il ajoute a la fin index operator
double operator [] (int index) const;
A quoi ca sert et a quoi ca sert quon ajoute const ici
Merci davance
- Edité par anti-runescape 22 novembre 2017 à 14:42:45
Tout d'abord, je te conseille la lecture d'un cours correct de C++, ça devrait vraiment te clarifier des tas de choses, et le faire mieux qu'une réponse sur un forum
new sers à créer un nouvel objet sur le tas. New va alouer de la mémoire où ranger l'objet puis appeler le constructeur de l'objet. New va ensuite vérifier que l'objet est correctement construit (i.e., aucune exception n'a quité le constructeur). Si ce n'est pas le cas, il désaloue la mémoire allouée, et propage l'exception.
Un objet alloué par new, et correctement construit, doit être détruit par delete.
This contient l'adresse de l'instance en cours d'une classe. Par exemple :
struct A{
void f(){ std::cout<<"j'ai l'adresse " << &(*this)<<"\n";}
};
void test(){
A a;
std::cout << "a a l'adresse" << &a << "\n";
a.f(); //affiche la même adresse
}
Quand a ton code, je suppose que c'est l'extrait d'un code qui fait en moins bien ce que std::array fait en bien. Dans le constructeur de array, on a du écrire un truc du genre v=new Truc[]; Comme cet objet doit être détruit à un moment, on le fait dans le destructeur avec delete[] v.
- Edité par ledemonboiteux 22 novembre 2017 à 15:19:27
On ne programme pas/plus comme ça en C++ depuis bien longtemps.
>A quoi sert new et this en C++
"new" sert à allouer dans le tas (mémoire) un certain nombre d'octets, fonction de la classe, et appelle les différents constructeurs nécessaire à l'initialisation de l'objet ainsi alloué.
"this" est un pointeur sur l'objet "courant", ça n'a donc du sens que dans le cas de méthodes/fonctions d'instance, où un paramètre caché est passé en plus de ceux indiqués par la signature de la méthode/fonction : l'instance de l'objet où la méthode/fonction s'applique. "this" permet de récupérer ce fameux paramètre caché correspondant à l'objet "courant".
>v = new double[dim];
ici, on alloue pas un double, mais un tableau de double d'une taille de dim*sizeof(double) octet (environ packint tout ça).
C'est le genre d'utilisation de tableau à la C qu'on fait plus en C++ depuis au moins 2011 et le passage au standard C++11.
>delete[] v;
"new ...[]", c'est pas la même chose que "new", alors, pour que le compilateur puisse générer le code correspondant à "new ...[]" et pas à "new", on écrit "delete[]" et pas "delete". Mais bon, on s'en fout, on ne devrait plus utiliser de tableau C en C++ depuis bien longtemps.
>ifdef
C'est pas "ifdef", c'est "#ifdef".
Ici, c'est une manière très crade d'avoir des traces d'exécutions qu'on peut activer ou désactiver en changeant la constante de compilation "TEST", Cherchez pas, c'est merdique comme manière de faire.
Pour l'opérateur + sans paramètre, je sais pas.
Pour l'opérateur +=(const vect&), retourner "*this" c'est pour pouvoir chainer les affectations, du genre :
x = (y+=2);
(code crade)
et "+", c'est pas "+=".
>A quoi ca sert et a quoi ca sert quon ajoute const ici
C'est la "constcorrectness", c'est indiqué au compilateur et au code client de cette fonction que la fonction s'engage à ne pas modifier ce qui est décoré avec "const".
Sir un objet "const", vous ne pouvez appeler que les méthodes indiquant qu'elle sont "const" (qu'elle ne modifie pas l'objet).
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
Tout les éléments de réponses ont l'air d'être là, du coup je me permet un peu de hors sujet
bacelar a écrit:
Ici, c'est une manière très crade d'avoir des traces d'exécutions qu'on peut activer ou désactiver en changeant la constante de compilation "TEST", Cherchez pas, c'est merdique comme manière de faire.
Tu peux développer un peu ? Je ne saisis pas pourquoi c'est une mauvaise manière de faire
Dream on, Dream on, Dream until your dream comes true
Parce que c'est illisible, pas safe (équilibrage de accolade, etc...), pollue le code avec des fonctionnalités orthogonales, ne gère pas des niveaux de logs, on doit tout recompiler pour changer un pauvre machin, etc...
Si c'est pour la pédagogie, on fait simple, la ligne directe. Pour la production, on utilise un vrai framework de log, voir de la programmation par aspect pour ce type de log "à la con".
Moi, je suis plus sur des logs "utiles" (fonctionnelles + via crashdump de watchdog) que du truffage de code avec des copier-coller de machine pour logger systématiquement tout mais surtout nimportenawak.
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
Pour pouvoir chaines des opérations, il faut que la méthode retourne un truc/machin sur lequel on veut faire d'autres opérations.
Renvoyer "*this" n'est qu'une convention, si tu veux renvoyer autre chose, tu peux le faire, tant que tu respects le type.
Mais bon, le code résultant sera peu compréhensible.
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
A quoi sert new et this en C++
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
* Un wrapper C++ pour sqlite * Une alternative a boost units