复习析构函数时看到的一个很好的例子:
#include <iostream>
using namespace std;
class Point{
private :
int X,Y;
public :
Point(int a=0,int b=0){ //构造函数
X=a;
Y=b;
cout<<"Initializing..."<<endl;
}
Point(const Point &p); // 复制函数
int GetX(){
return X;}
Point GetY(){
return Y;}
void show(){
cout<<"x="<<Y<<"Y="<<Y<<endl;
}
~Point(){ //析构
cout<<"Delete..."<<"X:"<<X<<",Y:"<<Y<<endl;
}
};
Point::Point(const Point &p){
X=p.X;
Y=p.Y;
cout<<"Copy Initializing..."<<endl;
}
void display(Point p){
p.show();
}
void disp(Point &p){
p.show();
}
Point fun(){
Point A(101,202);
return A;
}
int main()
{
Point A(42,35) ;//构造
Point B(A);//用A初始化B
Point C(58,94);//构造
cout<<"call display(B)"<<endl;
display(B);
cout<<"call disp(B)"<<endl;
disp(B);
cout<<"c = fun()"<<endl;
C =fun();//涉及到复制 注意 先产生一个中间变量 来自于复制B 再将其复制给C 函数fun()结束后调用析构
cout<<"call disp(C)"<<endl;
disp(C) ;
cout << "end!" << endl;
return 0;
}
析构函数在考试中比较常考,其实只要是考察我们对于每一个对象的生命周期,包括构造它的过程产生的中间对象都要注意,这个例子很好,大家仔细研究还是可以得到结果的,欢迎大家拍砖。哪里不懂的也可以留言
结果: