对象特性
---构造函数和析构函数
构造函数
---没有回值也不写void
---函数值和类名相同
---构造函数可以有参数,因此可以发生重载
---程序在调用对象的时候自动调用构造,无须手动调用,只能调用一次
析构函数语法
---析构函数,没有返回值也不写void
---函数名和类名也相同,在名称前加上符号~
---析构函数不可以有参数,因此不可以发生重载
---程序在对象销毁前会自动调用析构,无须手动调用, 而且只能化调用一次
构造函数的分类及其调用
---按参数分为:有参构造和无参构造
---按类型分为:普通构造和拷贝构造
class person
{
public:
//拷贝构造函数
person(const person &p)//拷贝的函数不能更改值,也就是在里面在传入一个值
{
m_age=p.age;
}
int m_age;
};
--- 三种调用的方式
--- 括号法
- ~~~
int main()
{
person p1;//默认构造函数的调用,注意不要加()因为系统会认为是声明
person p2(10);//有参构造函数
person p3(p2);//拷贝构造函数
}
显示法
---person p1;
---person P2=person (10);//有参构造
---person p3=person(p2);//拷贝构造
---person(10);//这是匿名对象,特点当前执行结束后,系统会立即回收匿名对象。
---person(p3);//注意不要利用拷贝构造函数初始化匿名对象,编译器会认为 person(p3)==person p3;系统认为是声明 ~~~
隐式转换法
---person p4=10;//相当于写了person p4=person(10);也就是显示法
---person p5=p4;//拷贝构造。
---拷贝构造的调用顺序
---来初始化一个新的对象时。
--- 值传递的会复制一份内存。故在调用默认构造时也调用了拷贝构造。
--- 值传递返回局部变量时也会调用一次默认函数和拷贝构造。
构造函数的调用
--- 用户定义有参构造函数,c++不提供默认无参构造。但调用拷贝构造
--- 如果用户定义拷贝构造函数,c++不会提供其他的构造函数
--- 如果没有调用函数,系统会自动提供。例如:拷贝构造,系统会进行赋值操作。