//对象做函数参数 //1 研究拷贝构造 //2 研究构造函数,析构函数的调用顺序 //总结 构造和析构的调用顺序 #include "iostream" using namespace std; class ABCD { public: ABCD(int a, int b, int c)//有参构造函数 { this->a = a; this->b = b; this->c = c; printf("ABCD() construct, a:%d,b:%d,c:%d ", this->a, this->b, this->c); } ~ABCD()//析构函数 { printf("~ABCD() construct,a:%d,b:%d,c:%d ", this->a, this->b, this->c); } int getA() { return this->a; } protected: private: int a; int b; int c; }; class MyE { public: MyE():abcd1(1,2,3),abcd2(4,5,6),m(100)//无参构造函数,外加初始化 { cout<<"MyD()"<<endl; } ~MyE() { cout<<"~MyD()"<<endl; } MyE(const MyE & obj):abcd1(7,8,9),abcd2(10,11,12),m(100)//赋值构造函数和初始化 { printf("MyD(const MyD & obj) "); } protected: //private: public: ABCD abcd1; //c++编译器不知道如何构造abc1 ABCD abcd2; const int m; }; int doThing(MyE mye1) { printf("doThing() mye1.abc1.a:%d ", mye1.abcd1.getA()); return 0; } int run2() { MyE myE; doThing(myE);//没成想会 调用拷贝构造函数,形参初始化完毕后才调用geta return 0; } // int run3() { printf("run3 start.. "); //临时对象(匿名对象)的生命周期只存在于这一句话,因为没有变量去承接它 ABCD(400, 500, 600); //临时对象(匿名对象)的生命周期只存在于这一句话,因为没有变量去承接它 ABCD abcd = ABCD(100, 200, 300);//这句不理解,不用调用构造函数 //若直接调用构造函数呢? //想调用构造函数对abc对象进行再复制,可以吗? //在构造函数里面调用另外一个构造函数,会有什么结果? printf("run3 end "); return 0; } int main() { //run2(); run3(); system("pause"); return 0; }
匿名对象引用的时候必须用const 不然报错