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 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
   |  
// test5.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream.h>
#include <string.h>
 
#define  DEBUG
class test
{
int x;
char * name;
public:
//constructeurs
	test(int c1=0, const char * c2="?");
	test(const test &);
	test operator + (const test &);
 
//Comment faire un operateur + qui renvoie un objet de type test ??
	test & operator = (test &);
    void showName();
    void swap(test & );
 
	//destructeurs
	~test()
	{
		cout<<"destructeur";
		showName();
		delete name;
	}
};
 
test::test(int c1,const char * c2)
{
 name=new char[strlen(c2)+1];
 
 strcpy(name, c2);
 
 x=c1;
#ifdef DEBUG
 cout <<"constructeur par defaut" ;
#endif
 showName();
}
 
 
test::test(const test & obj)
{
 int len;
 len=strlen(obj.name) + strlen("copie ");
 name=new char[len +1];
 strcpy(name,"copie ");
 strcat(name,obj.name);
#ifdef DEBUG
 cout <<"constructeur par recopie";
 showName();
#endif
  x= obj.x;
 
}
 
test test::operator+(const test & obj)
{ 
  test tmp;
  tmp.x=x+ obj.x;
  return tmp;
}
 
 
 
test & test::operator = (test & obj)
{
 int len;
 cout << "sizeof" << sizeof(obj.name) << " strlen" << strlen(obj.name) <<"\n";
 
 len=strlen(obj.name) + strlen("op= ");
 delete [] name;
  name = new char[len+1];  
#ifdef DEBUG 
 cout << "fonction operator =\n";
#endif
 strcpy(name,"op= ");
 strcat(name,obj.name);
 x=obj.x;
 return *this; 
}
 
 
 
void test::showName()
{
cout <<" nom : " <<  name << endl;
}
 
int main(int argc, char* argv[])
{
 
 test a=test (5,"a");
 test b(10,"b");
 test c(20,"c");
 test somme(10,"somme");
 c=a;
#ifdef DEBUG
 cout<<"avant adition\n";
#endif
 somme = c + a;
#ifdef DEBUG
 cout<<"après adition\n";
#endif
 
 return 0;
} | 
Partager