为什么有些成员变量没有在构造函数中初始化

发布时间:2024年01月04日

比如成员变量是某个类的对象,该对象有无参数的默认构造函数,那么在当前类的构造函数中就不用初始化了,比如

class Animal
{
    private:
        int id;
    public:
        Animal()
        {}
        ~Animal()
        {}
}

class Dog
{
    private:
        int sex;
        Animal animal;
    public:
        Dog()//animal也不用初始化,因为他也有默认无参构造函数
        {}
        ~Dog()
        {}
}

什么时候必须要在构造函数中初始化?

?? 情况一:需要初始化的数据成员是对象的情况(这里包含了继承情况下,通过显示调用父类的构造函数对父类数据成员进行初始化);??数据成员是对象,并且这个对象只有含参数的构造函数,没有无参数的构造函数;
?? 情况二:需要初始化const修饰的类成员;
?? 情况三:需要初始化引用成员数据;

初始化的分类:

1、普通成员变量,在初始化列表中或者构造函数中初始化,不能在定义时初始化

2、静态成员变量,必须在类外初始化

3、引用变量必须在初始化列表中进行初始化,引用必须在定义的时候初始化,并且不能重新赋值,所以也要写在初始化列表里面

4、const变量必须在初始化列表中进行初始化

5、static const变量必须在类中定义时初始化?

拓展-初始化列表

????????以冒号开头,后跟一系列以逗号分隔的初始化字段;

?c++类的对象的初始化

在程序中常常需要对变量赋初值,即对其初始化。

那么,怎样使他们得到初值呢?有人试图在声明类时对数据成员初始化。如

class Time
{
hour=0;
minute=0;
sec=0;
};

这是错误的。

因为类并不是一个实体,而是一种抽象类型,并不占存储空间,显然无处容纳数据。

如果一个类中所有成员都是公用的,则可以在定义对象时对数据成员进行初始化。如:?

class Time
{
pubic:
hour;
minute;
sec;
};
Time t1={14,56,30};

这种情况和结构体变量的初始化是类似的,在一个花括号内顺序列出各公用数据成员的值,两个值之间用逗号分隔。

如果是private私有的,或protected的数据成员,需要构造函数来处理对象的初始化;

程序用户只须在定义对象的同时指定数据成员的初值就好

文章来源:https://blog.csdn.net/m0_46104251/article/details/135390707
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。