D
djskrill
Why is the Constructor called 4 times but the Destructor 5 times? I am
using MS VC 6. If this has been covered already please let me know.
The Code:
#include <stdio.h>
class MyClass {
private:
int x;
int y;
static int count;
int id;
public:
MyClass(int x=0,int y=0): x(x),y(y){
printf("Create (%d)\n",++count);
id = count;
}
~MyClass(){
printf("kill (%d)\n",id);
}
MyClass(const MyClass &r){
printf("Copy\n");
x = r.x;
y = r.y;
}
void Set(int ix,int iy){
x = ix; y = iy;
}
void Print(){
printf("x=%d y=%d\n",x,y);
}
//operators
MyClass operator + (const MyClass &left){
printf("Start +\n");
MyClass temp;
temp.x = x + left.x; temp.y = y + left.y;
printf("End +\n");
return temp;
}
MyClass &operator += (const MyClass &left){
x += left.x; y += left.y;
return *this;
}
MyClass &operator += (int left){
x += left; y += left;
return *this;
}
MyClass &operator = (const MyClass &r){
x = r.x; y = r.y;
return *this;
}
};
int MyClass::count = 0;
int main(int argc,char **argv){
MyClass c1(5,6);
MyClass c2(1,1);
MyClass c3(100,200);
printf("before\n");
c1.Print();
c2.Print();
c3.Print();
c3 = c1+ c2;
printf("after\n");
c1.Print();
c2.Print();
c3.Print();
return 0;
}
using MS VC 6. If this has been covered already please let me know.
The Code:
#include <stdio.h>
class MyClass {
private:
int x;
int y;
static int count;
int id;
public:
MyClass(int x=0,int y=0): x(x),y(y){
printf("Create (%d)\n",++count);
id = count;
}
~MyClass(){
printf("kill (%d)\n",id);
}
MyClass(const MyClass &r){
printf("Copy\n");
x = r.x;
y = r.y;
}
void Set(int ix,int iy){
x = ix; y = iy;
}
void Print(){
printf("x=%d y=%d\n",x,y);
}
//operators
MyClass operator + (const MyClass &left){
printf("Start +\n");
MyClass temp;
temp.x = x + left.x; temp.y = y + left.y;
printf("End +\n");
return temp;
}
MyClass &operator += (const MyClass &left){
x += left.x; y += left.y;
return *this;
}
MyClass &operator += (int left){
x += left; y += left;
return *this;
}
MyClass &operator = (const MyClass &r){
x = r.x; y = r.y;
return *this;
}
};
int MyClass::count = 0;
int main(int argc,char **argv){
MyClass c1(5,6);
MyClass c2(1,1);
MyClass c3(100,200);
printf("before\n");
c1.Print();
c2.Print();
c3.Print();
c3 = c1+ c2;
printf("after\n");
c1.Print();
c2.Print();
c3.Print();
return 0;
}