C++ 构造函数

本文详细介绍了C++中的构造函数,包括其定义、调用方式以及成员初始化表的重要性。同时,强调了析构函数在对象生命周期中的角色,如何自动调用,以及如何在单例模式中使用私有析构函数。此外,还讨论了析构函数与成员对象构造顺序的关系,以及如何处理常量数据成员和引用数据成员的初始化问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 定义

    与类同名无返回值类型的成员函数。

    析构函数是对象创建的一部分,在创建对象时,会被自动调用;创建对象后,析构函数就不能再被调用

    默认析构函数:不带参数,或者所有参数都有默认值的的析构函数,析构函数可以重载。

    类的析构函数一般是公开的,但是有时也把析构函数声明为私有的(如单例模式中就把析构函数声明为私有的),其作用是限制创建该类对象的范围。

2. 调用

    根据参数进行重载,决定调用哪个析构函数。

3. 成员初始化表

    对于常量数据成员和引用数据成员(某些静态成员除外),不能在声明它们时进行初始化,也不能采用赋值操作对它们初始化

    

class A
{
    int x;
    const int y=1;//Error
    int &z=x;//Error
  public:
    A()
    {
        x=0;//OK
        y=1;//Error,y是常量成员,其值不能改变
    }
}

    它们的初始化要在成员初始化表中进行。

    

class A
{
    int x;
    const int y;
    int& z;
  public:
    A(): z(x),y(1)
    {
         x=0;
    }
}

    或者

    

class A
{
    int x;
    const int y;
    int& z;
  public:
    A(): x(0),z(x),y(1)
    {
    }
}


    成员初始化表的次序不决定它们的初始化次序,它们的初始化次序由它们在类中的定义的次序决定

    如果类中含有常量数据成员或引用数据成员,一定要定义带有成员初始化表的构造函数,否则编译程序生成的默认构造函数是没有成员初始化表的,这样的类是不能创建对象的。

    在创建包含成员对象的对象时,首先调用本身类的构造函数,在进入本身类的析构函数之前,将会去调用成员对象类的构造函数,然后再执行本身构造函数的函数体(在继承中,要先调用基类的构造函数,再调用成员对象类的构造函数,最后执行自己的函数体)。即使成员对象初始化表为空,只要类中有成员对象,编译程序就会生成对成员对象构造函数的调用指令,只不过它调用的默认构造函数。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值