为什么调用基类的构造函数只能写在初始化列表中?
发布网友
发布时间:2022-05-26 01:56
我来回答
共0个回答
...不能在构造函数中赋值,而只能在成员初始化表中进行?
那么ci和ri如果不在初始化列表里初始化,是不能执行完初始化操作的。也就是说,初始化const或者引用类型数据成员的唯一机会就是在构造函数初始化列表中。所以上述构造函数可以写为 A::A(int ii) : ci(ii), ri(ii) {i = ii;} 补充一点:内置类型的成员不进行隐式初始化,所以上述成员i不需...
C++有哪几种情况只能用初始化列表,而不能用赋值?
(1)对于const和reference类型成员变量,它们只能够被初始化而不能做赋值操作,因此只能用初始化列表;初始化与赋值是不同的:赋值是删除原值,赋予新值,构造函数的意思是先开辟空间然后为其赋值,只能算是赋值,不算初始化;初始化列表就不一样了,开辟空间和初始化是同时完成的,直接给予一个值;常量不...
...在子类构造函数初始化列表里调用基类构造函数?
//如果基类没有默认构造函数,则子类的构造函数必须要给定基类的构造函数参数。因为,在类的实例化时是先执行基类构造函数在执行子类构造函数。子类构造函数初始化列表后面直接列出基类构造函数即可,系统会自动调用,不用用户调用。class A{ public:A(int x,int y):x(x),y(y){} private:int x; i...
...const修饰类成员变量的初始化为什么只能用构造函数的初始化列表?
这里的【只能用构造函数的初始化列表】是说不能用构造函数初始化,你完全可以像你这样在类定义的时候直接赋值 但是这样意义不大,每个这个类的实例都有一个 const double a=100.1
C++中派生类的构造函数怎么显式调用基类构造函数?
必须用初始化表的形式调用基类构造函数,才能正确的把子类继承下来的父类的成员初始化了。如果在子类构造函数体内显式调用了基类构造函数的话,那么该构造函数就会对一个在子类构造函数内存空间内的一个临时对象进行了初始化,因为没有取得正确的对象(子类对象)的指针。所以构造了半天白费。等子类构造函数...
什么情况下必须使用C++的初始化列表
3. 继承类中调用基类初始化构造函数, 实际上就是先构造基类对象, 必须使用初始化列表.别的不再说明, 什么时候必须使用初始化列表是很明显的;另外, 简单的说, 任何时候都鼓励使用初始化列表, 一些别的事情(比如在构造函数中分配资源之类的, 请参考RAII, Resource Acquizition Is Initialization)可以...
...中规定:当派生类构造函数初始化时,必须同时对基类构造函数初始化,怎 ...
构造一个对象是从内向外构造的,也就是先构造基类,再构造派生类。因此必须在派生类构造函数执行前先执行基类构造函数。你的那个例子因为构造函数都是最简单的无参数类型,所以无所谓,不需要额外明白的写出来,C++会默认帮你调用无参数的base()。实际上完整的写法应该是这样的:class follow { public:fo...
哪位能解释一下什么时候必须在初始化列表中初始化成员
最常见的情况:class B{};class A{B b;};这种情况b需要,否则调用B的默认构造函数。一般来说,编译器会告诉你什么行什么不行,按照提示做就o了
C++ 类的疑问
没有为什么,语法就是这样规定的。在构造对象时,必须先构造基类,使基类正确初始化,即调用基类的构造函数。看下面的例子,Person 类中有一个string成员:Name,Student 类继承自Person,构造Student时肯定要先初始化Person,因此需要初始化基类构造函数参数列表。如果不显式列出基类构造函数参数列表,编译器...
c++中构造函数,初始化列表和直接赋值有什么区别吗?
(2) const成员或引用类型的成员。因为const对象或引用类型只能初始化,不能对他们赋值。还有一个赋值次数,效率上的区别,初始化参数列表在对象初始化时对成员变量赋值一次,构造函数内直接赋值,对成员变量赋值两次,一次是对象构造是用默认值进行赋值,第二次是调用构造函数赋值 ...