⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 +

📁 实现特定功能的俐子,,很好的大家快来下巴,,大家来分享
💻
字号:
【例5.9】  演示调用构造函数及析构函数的综合例题。
下面这个程序综合演示了调用构造函数、调用复制构造函数及调用析构函数的顺序,并演示了调用复制构造函数的3种不同情况。另外还比较了函数使用对象和对象的引用为参数的情况。
#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;}
		int GetY(){return Y;}
		void Show(){cout<<″X=″<<X<<″,Y=″<<Y<<endl;}
		~Point(){cout<<″delete...″<<X<<″,″<<Y<<endl;}
};
Point∷Point(const Point &p)//定义复制构造函数
{	X=p.X;
		Y=p.Y;
		cout<<″Copy Initializing ″<<endl;
}
void display(Point p)//Point类的对象作为函数的形参
{p.Show();}
void disp(Point&p)//Point类对象的引用作为函数的形参
{p.Show();}
Point fun()//函数的返回值为Point类的对象
{ PointA(101,202);
return A;
}
void main(){//主函数
    Point A(42,35);//对象A
    Point B(A);//①用A初始化B,第1次调用复制构造函数
    Point C(58,94);//对象C
    cout<<″called display(B)″<<endl;
    display(B);//②对象B作为display的实参
//第2次调用复制构造函数
	   cout<<″Next...″<<endl;
   cout<<″called disp(B)″<<endl;
   disp(B);
   cout<<″call C=fun()″<<endl;
   C=fun();//③fun的返回值赋给对象C
//第3次调用复制构造函数
   cout<<″called disp(C)″<<endl;
   disp(C);
   cout<<″out...″<<endl;
}
输出结果及注释如下: 
Initializing//创建对象A
Copy Initializing//调用复制构造函数,使用对象A初始化B
Initializing//创建对象C
called display(B)//用对象B作为参数
Copy Initializing//需要调用复制构造函数
X=42,Y=35//进入函数体执行语句
delete...42,35//退出函数时,需要调用析构函数清除对象
Next...
called disp(B)//使用引用作为参数,则不需要调用复制构造函数
X=42,Y=35//进入函数体执行语句
call C=fun()//C使用函数fun()的返回值
Initializing//在函数fun()内创建对象A
Copy Initializing//调用复制构造函数返回值
delete...101,202//返回值给对象C,调用析构函数清除临时对象A
delete...101,202//退出函数体,调用析构函数清除对象A
called disp(C)//使用引用作为参数
X=101,Y=202//进入函数体执行语句
out...
delete...101,202//调用析构函数清除对象C
delete...42,35//调用析构函数清除对象B
delete...42,35//调用析构函数清除对象A

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -