(1)重载构造函数①按参数分类:有参构造和无参构造
②按类型分类:普通构造和复制构造
(2)复制构造函数目的是满足不同的初始化需求
(3)注意事项用一个已经存在的对象去构造另一个一摸一样的对象
(3) 示例代码①不要用复制构造函数去初始化匿名对象,编译器会认为复制构造函数==匿名对象
#include二、调用using namespace std; //构造函数的分类及调用 //分类: //按照参数划分:无参构造 有参构造 //按照类型划分:普通构造 复制构造 class Person { public: //无参构造(默认构造) Person() { cout << "person的无参构造的调用" << endl; } //有参构造 Person(int a) { age = a; cout << "person的有参构造的调用" << endl; } //复制构造函数 Person(const Person &p) //注意:①复制时加上const②要用引用&的方式传入 { //将传入的对象身上所有的属性拷贝到当前对象身上 age = p.age; cout << "person的复制构造的调用" << endl; } //析构函数 ~Person() { cout << "person的析构函数的调用" << endl; } int age; };
(1)示例代码用已经存在的对象去构造另外一个一摸一样的对象
//调用
//括号法
void test01()
{
Person p1; //默认构造函数的调用,调用时不要加(),否则编译器会认为时一个函数声明
Person p2(10); //有参构造函数的调用
Person p3(p2); //复制构造函数的调用
cout << "p2的年龄为" << p2.age << endl;
cout << "p3的年龄为" << p3.age << endl;
}
//显式法
void test02()
{
Person p1;
Person p2 = Person(10); //重载构造
//其中person(10)如果单独拿出来就是匿名对象,此时他的名为p2
//匿名对象的特点是:当前程序执行结束后系统会立即回收掉匿名对象
//注意事项:不要用复制构造函数去初始化匿名对象,编译器会认为复制构造函数==匿名对象
Person p3 = Person(p2); //复制构造
}
//隐式转换法
void test03()
{
Person p4 = 10; //有参构造,相当于写了person p4=person(10);
Person p5 = p4; //复制构造,相当于Person p5 = Person(p4);
}
int main()
{
test01();
test02();
test03();
system("pause");
return 0;
}



