|
|
1
11
是的,在这种情况下,让编译器强制使用虚拟机会更好,我同意这是一个为向后兼容性而维护的设计错误。 然而,有一个技巧如果没有它是不可能的:
根据以上内容,我们可以选择编译时,我们是否希望func的虚拟性:
…但我同意,这对寻找一个函数的虚拟性的成本来说是一个微小的好处,而我自己,我总是尝试在任何适用的地方输入虚拟。 |
|
|
2
6
作为一个相关的注释,在C++ 0x中,您可以通过新的属性语法来强制执行显式重写。
还可以通过
|
|
|
3
3
设计上的弱点,我同意。 我也认为那是 真正地 很好,如果有两种不同的语法:
在重写函数时,用当前的C++规则很容易把事情搞砸。如果您错误地输入了函数名(或者在其参数列表中犯了错误),那么实际上是(1)而不是(2)。 您没有错误/警告。在运行时获得惊喜。 |
|
|
4
2
由于语言不能执行“好”的风格,C++一般甚至不尝试。至少在我看来,在任何情况下,包括这样的冗余说明符是否是一种好的样式(就个人而言,我讨厌它们存在的时候)。 (至少部分)谷歌的编码标准 可以 在某些情况下是有意义的,但就一般而言,C++通常被认为是平庸的建议。在某种程度上,他们甚至承认——他们中的一些公开声明仅仅是为了符合他们的旧代码。其他部分,他们不直接承认,而且(完全诚实地说)这个论点无论如何也不支持他们的一些标准(例如,其中一些似乎缺乏真正的理由)。 |
|
|
5
0
这是一个很好的问题,我当然同意,如果在基类中声明了方法virtual,那么重新声明派生类中的方法virtual是一种很好的方式。虽然有一些语言将风格构建成语言(例如谷歌GO,在一定程度上,Python),但是C++不是这些语言中的一种。虽然编译器确实可以检测到派生类不将关键字“virtual”用于基类中声明为“virtual”的内容(或者更重要的是,派生类声明了与基类同名的函数,并且没有在基类中声明为virtual),但实际上,有在发生这种情况时,许多编译器都会发出警告(甚至错误消息)。不过,在这个阶段,在语言中设置这样一个需求是不实际的,因为存在太多不那么严格的代码。此外,开发人员可以选择比语言更严格的语言,并且可以提高编译器的警告级别。 |
|
|
Eris · 纯虚拟成员有什么优势吗(除了他们可能防止的人为错误)? 3 年前 |
|
|
logonmanish · 虚拟com端口在Android上不工作 8 年前 |
|
|
AliS · 使用具有抽象基类指针的映射并调用派生类函数 10 年前 |
|
|
Philip Borgström · Java虚拟游戏板 10 年前 |
|
|
prestokeys · 具有完全可维护性的多重调度解决方案 11 年前 |
|
|
Nick_K · RTSP流到Windows 8上的虚拟视频设备 11 年前 |
|
|
Jay · 基于子类的属性对linq列表排序 12 年前 |
|
|
JLuc5 · C++父类,在两个不同的子类中实现了虚拟方法 12 年前 |