c++中第三种构造函数调用的情形是对象实参去初始化函数参数形参,具体看如下代码和注释:
#include <iostream>
using namespace std;
/*
第三种构造函数的调用场景是对象实参初始化函数形参的过程,会自动调用拷贝构造函数,比如在这个程序中,p,b其是两个不同的对象
*/
class Location
{
public:
Location(int xx = 0, int yy = 0)
{
X = xx; Y = yy; cout << "Constructor Object.\n";
}
//copy构造函数 完成对象的初始化
Location(const Location& obj) //copy构造函数
{
X = obj.X+1; Y = obj.Y+1;
cout << "调用拷贝构造函数" << endl;
}
~Location()
{
cout << X << "," << Y << " Object destroyed." << endl;
}
int GetX() { return X; } int GetY() { return Y; }
void setX() { X = 10000; }
void setY() { Y = 10000; }
private: int X, Y;
};
//业务函数 形参是一个元素
void f(Location p)
{
p.setX();
cout << p.GetX() << endl;
}
//注意,在这个程序中,一共有三个对象,第一个是a, 第二个是b,第三个是p, 调用析构函数时(编译器自动调用),越是先创建的兑现,越晚调用,详细看程序输出
void playobj()
{
Location a(1, 2);
Location b = a; //调用拷贝构造函数去进行初始化工作
f(b); //b实参去初始化形参p,会调用copy构造函数,第三种拷贝构造函数调用情景
}
void main()
{
playobj();
cout << "hello..." << endl;
system("pause");
return;
}
//输出结果如下:
程序输出结果如下: