1、作用:构造函数主要用来完成成员的初始化工作
2、写法:与类同名的函数,一般为公有,在单例的情况下可以定义为私有,构造函数可以带参数,也可以重载,但是没有返回类型,可以不手动提供构造函数。
3、继承:
(1)基类没有定义构造函数的情况:
派生类也可以不定义构造函数,全部采用默认的构造函数。
如果只有派生类定义构造函数,只需要构造派生类对象即可,对象的基类部分使用默认构造函数来自动创建。
(2)基类中存在构造函数:
基类中存在不带参数的构造函数。如果基类定义了构造函数,而且该构造函数没有参数,那么它可以隐式的被继承,也就是说,派生类根本不需要构造函数。
基类中存在带参数的构造函数。如果基类定义了带有参数的构造函数,则此构造函数必须被继承且在派生类中实现构造函数。同时提供一个将参数传递给基类构造函数的途径,以便在基类进行初始化时能获得必需的数据,在实现构造函数时使用base关键字。创建派生类的对象后,程序首先运行的是基类的构造函中的内容,然后才是派生类的内容。
4、拷贝构造函数:
拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它必须的一个参数是本类型的一个引用变量。拷贝构造函数是类本身就存在的一个构造函数。
浅拷贝深拷贝:默认的拷贝构造函数已经能够处理大部分问题,其原理就是对应的变量进行赋值,但是这就会存在一个问题,当变量中存在指针或者动态成员时,拷贝指针可能不是我们想要的结果,这就是浅拷贝。在“深拷贝”的情况下,对于对象中动态成员,就不能仅仅简单地赋值了,而应该重新动态分配空间。