#include "iostream" using namespace std; class Location { public: Location(int xx = 0, int yy = 0) { X = xx; Y = yy; cout << "构造函数Constructor Object.\n"; } Location(const Location & p) //复制构造函数 { X = p.X; Y = p.Y; cout << "拷贝构造函数Copy_constructor called." << endl; } ~Location() { cout << X << "," << Y << "析构 Object destroyed." << endl; } int GetX() { return X; } int GetY() { return Y; } private: int X, Y; }; //alt + f8 排版 void f(Location p) { cout << "Funtion:" << p.GetX() << "," << p.GetY() << endl; } Location g() { Location A(1, 2);//此时创建一个对象,构造函数 return A;//执行析构函数 //返回值是个Location的匿名对象,关键是怎么接? } //对象初始化操作 和 =等号操作 是两个不同的概念 //匿名对象的去和留,关键看,返回时如何接 void main() { //若返回的匿名对象,赋值给另外一个同类型的对象,那么匿名对象会被析构 Location B;//1默认构造函数 B = g(); //用匿名对象 赋值 给B对象,然后匿名对象析构 /* 两次构造,一次拷贝构造,两次析构。 **/ //若返回的匿名对象,来初始化另外一个同类型的对象,那么匿名对象会直接转成新的对象 Location C = g(); /*1次构造,一次拷贝构造,1次析构。*/ cout << "传智扫地僧测试" << endl; } |
|