首页 > 试题广场 >

派生类的构造函数的成员初始化列表中,不能包含________

[单选题]
派生类的构造函数的成员初始化列表中,不能包含_________
  • 基类的构造函数    
  • 派生类中子对象的初始化
  • 派生类中一般数据成员的初始化
  • 基类的子对象初始化
  • 本题答案D

  • 在vc上测试,依次初始化派生类子对象、调用基类构造函数、派生类中一般数据成员的初始化
    对于基类子对象初始化会报错
    图片说明
    图片说明

发表于 2020-10-10 19:37:22 回复(1)
楼上的代码应该需要改一下,c++是不允许派生类构造的时候使用间接基类的构造函数的。
可以改成另一个单独的类 Temp。
假设A中有子对象 Temp atemp; B中有子对象 Temp btemp;
那么在B的成员初始化列表中写atemp()的话,编译器会提示B中没有这个成员。。

个人理解是,派生类能够调用基类的构造函数。但是类的成员初始化都由自己的构造函数来完成,而不要其他派生体系中的类来干涉。你可以通过调用基类构造函数来给基类成员初始化,但是不能直接对基类成员初始化。
发表于 2020-12-06 16:12:08 回复(1)
在C++中,构造函数不能被继承,因此,派生类的构造函数必须通过调用基类的构造函数来初始化基类子对象。
在派生类初始化列表直接初始化基类的成员,被称为“越级初始化”,是会报错的
发表于 2023-11-17 19:12:31 回复(0)
请问基类子对象和派生类子对象是什么意思??有人解答一下吗??
发表于 2021-10-27 12:13:59 回复(2)
类的子对象≠类的对象
发表于 2025-06-17 09:41:58 回复(0)
派生类的构造函数的成员初始化列表中,不能包含基类中子对象的初始化。 具体来说,派生类构造函数的成员初始化列表的主要任务包括三部分: 1.对基类数据成员进行初始化。派生类直接在初始化列表中调用基类的构造函数并传递参数,因为我们不能在初始化对象时直接访问基类的数据成员。 2.对子对象数据成员进行初始化。子对象是对象中的对象,其初始化是在建立派生类时通过调用派生类构造函数来实现的。 3.对派生类数据成员进行初始化。这包括非静态const数据成员和引用成员的初始化,因为它们只存在初始化语义而不存在赋值语义,所以必须在初始化列表中进行初始化。 所以,在派生类构造函数的成员初始化列表中,不能包含基类中子对象的初始化,这是因为基类中的子对象是在基类的构造函数中进行初始化的,而不是在派生类的初始化列表中。
发表于 2024-06-09 11:40:36 回复(1)