fonction operator, valeur de retour
Bonjour. J'essai de me former au c++ .
Sur l'exemple suivant , j'ai été obligé de supprimer l'instruction delete name car il semble que je passe deux fois dans le destructeur pour le même objet.Je ne vois pas mon erreur.
A la base, j'ai écrit cela car je me demandais ce qui se passait à la suite du return dans la fonction test::operator+ . Il semblerait que le constructeur par recopie est utilisée pour copier les valeurs contenu dans l'objet retourné.
Est ce cela ?C'est bizrre car l'objet est pourtant déjà construit !
Tout cela n'est vraiment pas clair pour moi, si quelqu'un pouvait m'apporter la lumière ...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
| #include "stdafx.h"
#include <iostream.h>
#include <string.h>
class test
{
int x;
char * name;
int num;
static int cpt;
public:
//constructeurs
test(int c1=0,char * c2 ="?");
test(test &);
test operator + (test &);
void showName();
//destructeurs
~test()
{
cout<<"destructeur";
showName();
//delete name;
}
};
test::test(int c1,char * c2)
{
int len;
len =strlen(c2);
name=new char[len+1];
strcpy(name,c2);
x=c1;
cout <<"constructeur par defaut";
showName();
}
test::test(test & obj)
{
int len;
len=strlen(obj.name + strlen("copie "));
name=new char[len +1];
strcpy(name,"copie ");
strcat(name,obj.name);
cout <<"constructeur par recopie";
showName();
x= obj.x;
}
test test::operator+(test & obj)
{
test tmp;
tmp.x= x+ obj.x;
cout <<"avant return\n";
return tmp;
}
void test::showName()
{
unsigned int i;
cout<<" ";
for (i=0;i<strlen(name);i++)
{
cout<<name[i];
}
cout<<"\n";
}
int main(int argc, char* argv[])
{
test a=test (5,"a");
test b(10,"b");
test c(20,"c");
cout<<"avant adition\n";
c=b + c;
cout<<"après adition\n";
return 0;
} |
[Balises CODE rajoutées par Loulou24, merci d'y penser à l'avenir]