1.两种分类方式:
- 按参数分为:有参构造和无参构造
- 按类型分为:普通构造和拷贝构造
2.三种调用方式:
- 括号法
- 显示法
- 隐式转换法
#include<iostream>
using namespace std;
//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;
}
int age;
};
//调用
void test()
{
//1.括号法
Person p; //默认构造函数调用,p后面不加(),编译器会把Person p()看成一个函数的声明
Person p1(10); //调用有参构造函数
Person p2(p1); //调用拷贝构造函数
cout << "p1的年龄为:" << p1.age << endl;
cout << "p2的年龄为:" << p2.age << endl;
//2.显示法
Person p3 = Person(10);//调用有参构造,Person(10)为匿名对象,p3为名字
Person p4 = Person(p3);//调用拷贝构造
//Person(10);匿名对象,特点:当前执行结束后,系统会立即回收掉匿名对象
//Person(p4); 不要利用拷贝构造函数初始化匿名对象,编译器会认为Person(p4) == Person p4;
//3.隐式转换法
Person p5 = 10;//相当于写了Person p5 = Person(10); 有参构造
Person p6 = p5;//拷贝构造
}
int main()
{
test();
system("pause");
return 0;
}