1、构造函数分类
- 按照参数分类:无参构造(默认构造)、有参构造;
- 按照类型分类:普通构造、拷贝构造;
class Person
{
public:
Person()
{
cout<<"Person的无参构造函数调用"<<endl;
}
Person(int a)
{
age=a;
cout<<"Person的有参构造函数调用"<<endl;
}
Person(const Person &p)
{
age=p.age;
cout<<"Person的拷贝构造函数调用"<<endl;
}
~Person()
{
cout<<"Person的析构函数调用"<<endl;
}
private:
int age;
}
2、构造函数调用
2.1、无参(默认)构造函数调用
Person p1;
//注意事项:调用默认构造函数,不要加()
//Person p(); 这一句,编译器会认为是函数的声明;【在函数里声明函数是合法的】
2.2、 有参构造函数调用
//1、括号法
Person p2(10); //有参构造
Person p3(p2); //拷贝构造
//2、显示法
Person p5 = Person(10); //有参构造
Person p6 = Person(p5); //拷贝构造
Person(10); //匿名对象,当前行执行结束,系统会立即回收匿名对象
cout<<"匿名对象已经没了 "<<endl;
//注意事项:不要利用拷贝构造函数 初始化匿名对象
//Person(p6); //会提示p6重定义,这一句编译器认为是Person p6;
//3、隐式转换法
Person p7 = 10; //有参构造
Person p5 = p4; //拷贝构造