分类1按参数:无参构造和有参构造
分类2按类型:普通构造和拷贝构造
定义了有参必须显式定义无参
class Person {
public:
int m_Age; // 年龄
// 无参构造
Person() {
m_Age = 0;
cout << "无参构造函数调用了..." << endl;
}
// 有参构造
Person(int age) {
m_Age = age;
cout << "有参构造函数调用了..." << endl;
}
// 拷贝构造函数
Person(const Person& p) {
m_Age = p.m_Age;
cout << "拷贝构造函数调用了..." << endl;
}
~Person() {
cout << "析构函数调用了..." << endl;
}
};
int main() {
// 构造函数如何调用
// 调用有两种方式:显示调用 隐式调用
// 显示调用
Person p = Person(); //无参
Person p1 = Person(20);//有参
cout << p1.m_Age << endl;
// 隐式转换法
Person p6 = 10; // 编译器会转换成 Person p6 = Person(10);
// 隐式调用
Person p2; //隐式调用无参构造
Person p3(30); //隐式调用有参构造
// 隐式调用无参构造函数不能加上括号
// Person p2(); 函数声明
//拷贝构造
Person p4(p);
Person p5 = Person(p);
// 利用隐式转换法调用拷贝构造函数
Person p7 = p6; // 转换 Person p7 = Person(p6);
// 匿名对象
Person(); //本行执行完了以后立即释放,即无参构造调用后立即调用析构函数
Person(p); // 编译器认为 Person p;
// 初始化列表
Person p8 = {};//无参
Person p9{20}; //有参
Person p10 = { 22 }; //有参
return 0;
}