先来创建一个类名:

class Person
{
Person(){ //构造函数
}
~Person(){ //析构函数
}
}

构造函数用于创建对象时进行初始化,析构函数用于对象销毁前进行清理工作。

这两个函数都是必须要有的,如果没写,编译器会自动帮我们写上,但都是空实现。

关于构造函数

按参数分为有参构造和无参构造

Person(int a){}  //有参构造
Person(){} //无参构造

编译器默认给我们提供的是无参构造

按类型分为普通构造和拷贝构造

Person(){} //普通构造
Person(const Person &p){}//拷贝构造

构造函数和析构函数_析构函数

编译器提供的析构函数是空实现,所以什么都没有输出。

构造函数:编译器调用三个函数:无参构造函数(空实现),析构函数(空实现),拷贝构造函数(对属性值进行赋值)。

关于书写构造函数:

如果书写了无参构造函数,编译器会提供拷贝构造函数。

构造函数和析构函数_无参构造函数_02

如果书写了有参构造函数,编译器不会提供无参构造函数,但会提供拷贝构造函数。

如果书写了拷贝函数,编译器不会提供无参、有参构造函数。

调用的方法:括号法、显示法、隐式转换法。

括号法:

Person p1;
Person p2(10);
Person p3(p1);

显示法:

Person p1;
Person p2=Person(10);

隐式转换法:

Person p1;
Person p2=10;
Person p3=p1;

拷贝函数调用:

1.使用一个已经创建完毕的对象进行初始化。

Person p1;

2.值传递的方式给函数参数传值。

void test(Person p)
{
}
void test01()
{
Person p1;
test(p);
}

3.以值方式返回局部对象。

Person test()
{
Person p1;
return p1;
}


如有不对,欢迎指正。