![]() |
1
16
为什么有人会这样做?它违反了基本类合同。 如果不想实现与基类具有相同接口的子类,那么为什么还要继承它呢? 使用合成。 没有等价的c# 新的 关键字在C++中。 所以您不能取消方法的“虚拟性”。 如果你 真正地 要做到这一点,您可以始终:
但是如果你这样做了,我知道你的设计有问题。 我希望每个C++编译器至少把这两种情况都当作警告。 |
![]() |
2
9
首先,坏消息是,不能用另一个仅在返回类型上不同的函数重写或隐藏虚拟函数。然后,另一个坏消息,C++给你足够的绳子,以悬挂你自己在许多你以前没有考虑过的方式,你可以得到类似的效果:
诀窍在于,通过在派生类中定义具有相同名称和不同参数的方法,您实际上隐藏了基类(除非添加
注意,实际上并不是从对象中移除方法,而是将其隐藏在派生类中。如果通过指向基类的指针或引用调用该方法,则虚拟方法仍然存在,并将被调用。 |
![]() |
3
1
首先,你不能重写
具有
因为它们的区别仅仅在于返回类型——这不会编译。 如果函数带有签名
是
有关虚拟函数的详细信息(以及更多!)你可以偷看 C++ FAQ Lite . |
![]() |
4
1
|
![]() |
5
1
从技术上讲,可以通过在派生类static中声明方法:
这听起来很奇怪,但是尝试一下-编译器会吃东西并发出警告。
覆盖将被忽略,并且
不过,你为什么需要那样的东西? |
![]() |
6
0
不,不是真的。即使您引入一个中间类来创建继承的方法
|
![]() |
JoeZ · Do while循环不会中断 6 年前 |
![]() |
JoeZ · 如果循环不工作。运行时显示重复cout。 6 年前 |
![]() |
Joe · 正在展开宏以进行调试? 6 年前 |
|
Matthew · 自己编译公共库会提高性能吗? 6 年前 |
![]() |
Barry · 在MSVC中处理宏中的额外括号 6 年前 |