请问, 基类中非私有数据成员不能再派生类构造函数的初始化列表中初始化
请教, 基类中非私有数据成员不能再派生类构造函数的初始化列表中初始化
我在看C++的继承时看到下面这段话:
派生类构造函数可以引用受保护的基类成员,但不能在初始化列表中引用,因为在初始化时,这些成员还不存在. 初始化列表是在调用基类的构造函数,对象的主要部分创建之前处理. 如果要显式初始化继承的数据成员,就必须在构造函数体中进行.
我不太明白的地方是:
(1)“对象的主要部分”是指什么?
(2)调用派生类构造函数之前,已经调用过基类的构造函数了,为什么说“在初始化时,这些成员还不存在”?
望高手指点一下。
------解决方案--------------------
我到不是什么高手,只谈一谈我自己的理解
“派生类构造函数可以引用受保护的基类成员,但不能在初始化列表中引用,因为在初始化时,这些成员还不存在.”
我觉得在函数调用构造函数中,基类的构造函数的调用从而构造基类,构造函数调用没有结束时该对象还没有
创建完毕呢!还有一点如派生类重新定义构造函数的话,如需对基类的成员进行初始化需调用基类构造函数
格式为
派生类构造函数名(参数列表):基类构造函数名(参数列表)
对与说的对象的主要部分,不太明白楼主具体要问什么,我觉得应该指的是基类的成员
------解决方案--------------------
如果派生类的构造函数有初始化列表.则先执行初始化列表里面的内容.然后才是函数体中的内容
(1)“对象的主要部分”是指派生类中的成员变量
(2)可能是因为保护继承作用域的原因
------解决方案--------------------
派生类可以说是由 基类 + 派生类组成的。
在派生类构造函数中,需要调用基类构造函数来对基类部分成员进行初始化;
写构造函数,拷贝构造函数,赋值函数都要注意别忘记了基类数据成员;
------解决方案--------------------
(1)“对象的主要部分”是指什么?
这是一种比较抽象的说法,你可以理解为在需要有具体的对象实例的时候才需要的部分
(2)调用派生类构造函数之前,已经调用过基类的构造函数了,为什么说“在初始化时,这些成员还不存在”?
确实在调用派生类构造函数之前已经调用过基类的构造函数,不过在进行成员初始化的时候还并没有调用基类的构造函数
------解决方案--------------------
我在看C++的继承时看到下面这段话:
派生类构造函数可以引用受保护的基类成员,但不能在初始化列表中引用,因为在初始化时,这些成员还不存在. 初始化列表是在调用基类的构造函数,对象的主要部分创建之前处理. 如果要显式初始化继承的数据成员,就必须在构造函数体中进行.
我不太明白的地方是:
(1)“对象的主要部分”是指什么?
(2)调用派生类构造函数之前,已经调用过基类的构造函数了,为什么说“在初始化时,这些成员还不存在”?
望高手指点一下。
------解决方案--------------------
我到不是什么高手,只谈一谈我自己的理解
“派生类构造函数可以引用受保护的基类成员,但不能在初始化列表中引用,因为在初始化时,这些成员还不存在.”
我觉得在函数调用构造函数中,基类的构造函数的调用从而构造基类,构造函数调用没有结束时该对象还没有
创建完毕呢!还有一点如派生类重新定义构造函数的话,如需对基类的成员进行初始化需调用基类构造函数
格式为
派生类构造函数名(参数列表):基类构造函数名(参数列表)
对与说的对象的主要部分,不太明白楼主具体要问什么,我觉得应该指的是基类的成员
------解决方案--------------------
如果派生类的构造函数有初始化列表.则先执行初始化列表里面的内容.然后才是函数体中的内容
(1)“对象的主要部分”是指派生类中的成员变量
(2)可能是因为保护继承作用域的原因
------解决方案--------------------
派生类可以说是由 基类 + 派生类组成的。
在派生类构造函数中,需要调用基类构造函数来对基类部分成员进行初始化;
写构造函数,拷贝构造函数,赋值函数都要注意别忘记了基类数据成员;
------解决方案--------------------
(1)“对象的主要部分”是指什么?
这是一种比较抽象的说法,你可以理解为在需要有具体的对象实例的时候才需要的部分
(2)调用派生类构造函数之前,已经调用过基类的构造函数了,为什么说“在初始化时,这些成员还不存在”?
确实在调用派生类构造函数之前已经调用过基类的构造函数,不过在进行成员初始化的时候还并没有调用基类的构造函数
------解决方案--------------------