#include <iostream>
using namespace std;
class Locaton
{
public:
Locaton(int xxx = 0, int yy = 0)
{
X = xx;
Y = yy;
cout << "constructor Object!" << endl;
}
Locaton(const Locaton &p)
{
X = p.x;
Y = p.y;
cout << "Cpoy constructor called!" << endl;
}
~ Locaton()
{
cout << X << "," << "Object destoryed!" << endl;
}
int GetX()
{
return X;
}
int GetY()
{
return Y;
}
private:
int X;
int Y;
};
void f(Locaton p)
{
cout << "Function:" << p.GetX() << "," << p.GetY() << endl;
}
//函数的返回值是一个对象,返回的是一个新的匿名对象,所以会调用匿名对象类的拷贝构造函数
//匿名对象的去留:如果用匿名对象初始化另外一个同类型的对象,那么匿名对象,直接转成有名对象,
//如果用匿名对象赋值给另外一个同类型的对象,匿名对象被析构
//如下代码的编写,编译器会返回一个新对象(没有名字,匿名对象)
Locaton g()
{
Locaton A(1, 2);
return A; //调用类的拷贝构造函数
}
void mainobjplay()
{
//若返回的匿名对象,赋值给另外一个同类型的对象,那么匿名对象会被析构
//Locaton B;
//B = g();//用匿名对象赋值给B对象,然后匿名对象析构
//若返回的匿名对象,来初始化一个同类型的对象,那么匿名对象会直接转成新的对象
Locaton B = g();
}
void main(int argc, char const *argv[])
{
mainobjplay();
return 0;
}
拷贝构造函数4.匿名对象
最新推荐文章于 2023-09-15 20:30:00 发布