#include<iostream>
using namespace std;
class ABCD
{
public:
ABCD()
{
}
ABCD(int a, int b, int c)
{
m_a = a;
m_b = b;
m_c = c;
cout << "ABCD类有参构造";
cout << "a=" << m_a << "b=" << m_b << "c=" << m_c << endl;
}
~ABCD()
{
cout << "我是ABCD类的析构" << endl;
}
int getA()
{
return m_a;
}
private:
int m_a;
int m_b;
int m_c;
};
class Mye
{
public:
Mye() :abcd1(1, 2, 3), abcd2(4, 5, 6), m(7)
{
cout << "我是MYe的构造函数" << endl;
}
Mye(const Mye& obj) :abcd1(8, 9, 10), abcd2(11, 12, 13), m(8)
{
cout << "我是mye的拷贝构造函数" << endl;
}
~Mye()
{
cout << "我是Mye的析构函数" << endl;
}
public:
ABCD abcd1;
ABCD abcd2;
const int m;
};
int dothing(Mye mye)
{
cout << "dothing() mye.abcd1,getA()" << mye.abcd1.getA() << endl;
return 0;
}
int run2()
{
Mye mye;//先调用ABCD类的有参构造函数,再调用mye类的有参构造函数
dothing(mye);//先调用Mye类的有参构造函数,再调用mye类的拷贝构造函数
return 0;//析构调用顺序与构造调用顺序相反
}
int run3()
{
cout << "run3 start..."<< endl;
//生成一个匿名对象(临时对象),刚被构造就会被析构
//因为生成的匿名对象没有一个对象去接
//ABCD(4, 5, 6);//不输出run3 end
//生命周期为整个函数周期
ABCD abcb3 = ABCD(4, 5, 6);//可以输出run3 end
cout << "run3 end" << endl;
return 0;
}
int main()
{
//run2();
run3();
system("pause");
}
C++ 匿名对象的生命周期——强化训练(二)
猜你喜欢
转载自blog.csdn.net/error0_dameng/article/details/82052512
今日推荐
周排行