若虚基类由基类派生而来,则仍然先调用基类构造函数,在调用派生类构造函数
时间: 2024-03-11 08:44:21 浏览: 91
是的,如果一个虚基类是由另一个基类派生而来,那么在构造派生类的对象时,仍然是先调用虚基类所在的基类的构造函数,然后才会调用派生类的构造函数。这是因为虚基类的构造函数必须在其最远的派生类的构造函数中初始化,而最远的派生类的构造函数是通过调用所有中间基类的构造函数来进行初始化的。因此,如果一个虚基类是由另一个基类派生而来,那么在构造派生类的对象时,仍然需要先初始化虚基类所在的基类,然后才能够初始化派生类。
相关问题
在最后派生类构造函数的调用中,先调用虚基类的构造函数,在调用其它基类的构造函数时不再调用虚基类的构造函数
这句话是错误的。在最后派生类构造函数的调用中,先调用所有虚基类的构造函数,然后按照基类的继承顺序依次调用其它基类的构造函数,其中包括间接继承的基类。在执行完所有基类的构造函数后,再执行派生类自己的构造函数。需要注意的是,如果某个类既是虚基类,又是非虚基类的基类,那么它的构造函数会在虚基类构造函数被调用之后被调用。
下列关于虚基类的叙述中,错误的是() A. 使用虚基类可以消除由多继承产生的二义性 B. 构造派生类对象时,虚基类的构造函数只被调用一次 C. 声明“class B:virtual public A”说明类B为虚基类。 D. 建立派生类对象时,首先调用虚基类的构造函数 正确答案: C:声明“class B:virtual public A”说明类B为虚基类。;
选项C是错误的,因为声明"class B: virtual public A"说明的是类B继承了虚基类A,而不是B是虚基类。虚基类是被继承的类,而不是继承它的类。因此,选项C是错误的。选项A、B和D是正确的。使用虚基类可以消除由多继承产生的二义性;构造派生类对象时,虚基类的构造函数只被调用一次;建立派生类对象时,首先调用虚基类的构造函数。
阅读全文