#include<iostream>
using namespace std;
class person
{
public:
person()
{
cout << "1.无参、普通构造函数" << endl;
}
person(int a)
{
age = a;
cout << "2.有参、普通构造函数" << endl;
}
person(const person& a)
{
age = a.age;
cout << "3.有参、拷贝构造函数" << endl;
}
~person()
{
cout << "析构函数" << endl;
}
private:
int age;
};
void test01()
{
person p;
person p1(10);
person p2(p1);
}
void test02()
{
person p;
person p1=person(10);
person p2=person(p1);
}
void test03()
{
person p;
person p1 = 10;
person p2 = p1;
}
int main()
{
test01();
person p3 = person(10);
person(10);
cout << "aaaaaaaaaaaaaaaaaaaa" << endl;
person p4();
}
运行结果:
https://img-blog.csdnimg.cn/20200802100729698.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNjgwNDUz,size_16,color_FFFFFF,t_70
运行结果分析:
1.无参、普通构造函数 test01里 person p; 这一行代码执行时调用无参、普通构造函数
2.有参、普通构造函数 test01里 person p1(10); 这一行代码执行时调用有参、普通构造函数
3.有参、拷贝构造函数 test01里 person p2(p1); 这一行代码执行时调用有参、拷贝构造函数
析构函数 test01里 所有代码执行完后,释放p, 执行一次析构函数
析构函数 test01里 所有代码执行完后,释放p1,执行一次析构函数
析构函数 test01里 所有代码执行完后,释放p2,执行一次析构函数
2.有参、普通构造函数 main函数中 person p3 = person(10); 这一行代码执行时调用有参、普通构造函数
2.有参、普通构造函数 main函数中 person(10); 这一行代码执行时调用有参、普通构造函数
析构函数 main函数中 person(10); 这一行代码执行完后立即调用析构函数,因为匿名对象没有对象名称,后续无法再继续使用
aaaaaaaaaaaaaaaaaaaa main函数中 cout << "aaaaaaaaaaaaaaaaaaaa" << endl; 这一行代码执行结果
析构函数 main函数中 所有代码执行完毕后,释放p3,执行一次析构函数