![]() |
1
7
不幸的是,您总是必须从最派生的类调用虚拟基类构造函数。 这是因为您要说的是,虚拟基在为对象实例派生的所有类之间共享。由于一个构造函数只能在一个对象的给定实例化中调用一次,所以必须显式调用最派生类中的构造函数,因为编译器不知道有多少类共享虚拟基础(从C++编程语言第三版,第152.4.1节)释义(可能很差)。这是因为编译器将从最基本类的构造函数开始,并工作到最派生的类。按照标准,直接从虚拟基类继承的类不会调用其虚拟基类构造函数,因此必须显式调用它。 |
![]() |
2
2
因为同样的原因,C不得不称之为它。这不是一个模棱两可的问题,而是一个事实,即a的constructIOR必须只被调用一次(因为它是一个虚拟基)。 如果您希望C可以初始化A的构造函数,那么如果类D继承C和另一个最终继承A的类呢? |
![]() |
3
0
规则就是这样。有重写虚拟函数的规则和构建虚拟基子对象的规则。尽管两者在概念上非常相似,但它们遵循完全不同的规则,原因之一是:重写虚函数是显式的。调用构造函数对于默认构造函数是隐式的。 虚拟基类中的虚拟函数只需要有一个最终重写器,即重写所有其他重写器的重写器。(非虚拟基类中的虚拟函数不能有两个重写器,这样一个重写器就不会重写另一个。) 但是,虚拟基类构造函数总是从最派生的类调用,并且通常以隐式形式(不必在ctor init列表中提及虚拟基类),因为大多数设计用作虚拟基类的类都是“纯接口”,没有数据成员,也没有用户初始化。 |
![]() |
4
-1
关于PARASIFIFT C++FAQ Lite这个问题 is outlined . |
![]() |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
![]() |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
![]() |
rainer · 后台插入程序的初始化 1 年前 |
![]() |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |