一、 委托构造函数
委托构造函数用在什么地方呢?
当一个类里有许多构造函数的时候,往往会又很多重复的,这就像重载函数一样,这时候C++就给出了委托构造函数来解决这个问题!
理解机制:就是一个构造函数委托另一个构造函数来完成任务。
例子:
原来需要写的两个构造函数:
应用了委托构造函数之后:
其实这就相当于在第二构造函数里面调用第一个构造函数完成赋值。这样做的好处是保持修改的方便快捷!
二、 复制构造函数
用在什么地方:想要把一个已有对象赋值给新对象的时候。
运行机制:赋值啦!
编译器会构造默认的复制构造函数。
使用说明:它的形参是本类对象的引用。
语法:
声明:
Class 类名{
Public:
类名(形参);//构造函数
类名(const 类名&对象名);//赋值构造函数,const的作用,已经学习过引用是可以双向传递的,所以要保证赋值过后就要两个对象无关,所以这时候写const保证是一次赋值。
}
定义
类名::类(const 类名&对象名)//复制构造函数的实现
{函数体}
参数是类的对象是会发生复制构造,返回值是对象是也会产生复制构造。当然隐含的赋值构造函数会大部分解决的。(没有指针成员)
当然,也有一些情况下不想要编译器生成隐含的赋值构造函数,这时候可以用delete
在class中写上:
Class 类名{
Public:
类名(形参);//构造函数
类名(const 类名&对象名)=delete;//不生成隐含的复制构造函数
}
三、 赋值构造函数的练习
Point::Point(const Point &p)
{
X=p.x;
Y=p.y;
Cout<<”Calling the copy constructor”<<endl;
}
四、 析构函数
用在哪?
对象被删除后完成一些清理工作!
编译器还是有默认析构函数。
语法:
类中声明:
~Point();
定义析构函数:
}```
参数表必须为空。