【C++】构造函数

构造函数

    定义一个对象的同时,给它的数据成员赋初值——对象的初始化。

    结合简单变量的建立过程来认识一下:每一个变量都是一个内存空间,定义变量时并初始化,就是分配内存空间的时候,向内存单元中写入了一个初始值。而对象的建立过程与变量类似。因为类的对象比较复杂,由于类的封装性,它不允许在类的非成员函数中直接访问类对象的私有和保护成员。所以通过类的构造函数,可以访问类对象的私有和包含成员,对类对象数据成员进行初始化。

    定义类时候,没有定义构造函数,编译系统会生成一个默认形式的隐含的构造函数,而它的函数体是空的,不具备任何功能。构造函数可以重载,然后实例化对象并初始化的时候,根据对象的参数类型和个数,从定义的构造函数中选择相对应的。作为类的成员函数:内联函数/不带任何参数/带参数表及默认值/重载,根据具体问题,设计合适的构造函数将对象初始化。

特点:

    命名必须和它的类相同。

没有返回值,加Void是错误的。

声明定义为共有函数,这样对象才能够访问类的数据成员并进行初始化。

建立对象时系统自动调用;

拷贝构造函数

    用于在建立新对象时将已存在对象的数据成员值拷贝给新对象,用对象初始化的时候,自动调用;如果用户未定义,系统会自动生成默认的函数进行对象之间的位拷贝。

    特点:与类名相同。形参是本类对象的引用,等同于普通构造函数和赋值操作符共同实现。

调用拷贝构造函数的情况

1.类的一个对象初始化同类的另一个对象。

2.函数的形参是类的对象,调用函数,将对象作为函数实参传递给形参时。

3.函数返回值是类的对象。

拷贝构造函数与对象赋值

    拷贝构造函数是用一个存在的对象去构造另一个不存在的对象。对象赋值两个对象都存在,把一个对象的值给两个对象。

拷贝构造函数与构造函数在建立对象时,两者之中有且仅有一个被调用。

派生类构造函数

    派生类中,新增成员中包括基类继承的成员,内嵌的其他对象,派生类的数据成员还包括了这些对象的数据成员。构造派生类对象,对基类数据成员,对象数据成员,及自己新增数据成员进行初始化。


派生类(参数总表):基类名(参数表),成员对象名(参数表) //参数总表的个数为基类参数表与成员对象参数表之和。
{
    派生类新增数据成员;
}

单继承构造函数的调用顺序

1.调用基类构造函数

2.调用内嵌成员对象的构造函数

3.派生类自己的构造函数;

多继承是单继承的扩展,只是多继承派生类基类数目多一些,构造函数调用顺序从左向后。

虚基类的构造函数

为什么会出现虚基类?
    多继承中,派生类部分或全部直接基类,又是另一个共同基类派生来的。那么直接基类中,就会包含从共同基类中继承的相同名称的成员。派生类对象中,同名数据成员在内存中同时拥有多个拷贝,同一成员函数就会有多个映射,出现间接二义性。虚基类解决了这个问题。
虚基类的定义融合在派生类的定义过程中。
    class x1:virtual public x //x为虚基类;
    建立对象的时候,使用的派生类为最远派生类,只有最远派生类的构造函数才调用虚基类的构造函数,保证虚基类子对象只初始化一次。
    虚基类的构造函数先于非虚基类构造函数调用。

学习的过程

    构造函数的不同的场景有不同的变化,但都是在最基本的构造函数上扩展的。掌握了基本的,扩展一下就都熟悉了。


评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值