按照参数分类:无参构造(默认构造)
有参构造
按照类型分类:构造函数
拷贝函数 —把初始值对象的每个数据成员的值都复制到新建立的对象中。
类名::类名(类名&对象名)
{
函数体;
}
class Person
{
public:
Person(Person &p);//声明拷贝构造函数
Person(int = 0,string = "张三");
void show();
private:
int age;
string name;
};
Person::Person(Person &p)//定义拷贝构造函数
{
cout << "拷贝构造函数" << endl;
age = 0;
name = "ABC";
}
Person::Person(int a, string s):age(a),name(s)
{
cout << a << " " << s << endl;
}
void Person::show()
{
cout << "age="<<age << endl;
cout << "name=" <<name << endl;
}
int main()
{
Person p(123, "yar");
Person p2(p);
p2.show();
return 0;
}
//输出
123 yar
拷贝构造函数
age=0
name=ABC
调用:
1.括号法 Person p2(p);
//如果创建了对象就能自动调用默认构造函数 Person p1;
但在调用默认构造函数的时候不要加()
如果这样写的话Person p1(); 编译器会认为这是一个函数的声明,不会认为在创建对象
拷贝构造函数的调用: Preson p3(p2);
2.显示法
Person p1;//默认
Person p2=Person(10);//有参构造
Person p3=Person(p2);//拷贝构造
Person(10);//这个叫做匿名对象,特点:当前执行结束后,系统回立即回收掉匿名对象
不要利用拷贝构造函数 初始化匿名对象 编译器会认为 对象声明,而不是调用构造函数初始化对象
3.隐式转换法
Person p4=10;//相当于 Person p4(10);
Person p5= p4;//拷贝构造