1
16
为什么有人会这样做?它违反了基本类合同。 如果不想实现与基类具有相同接口的子类,那么为什么还要继承它呢? 使用合成。 没有等价的c# 新的 关键字在C++中。 所以您不能取消方法的“虚拟性”。 如果你 真正地 要做到这一点,您可以始终:
但是如果你这样做了,我知道你的设计有问题。 我希望每个C++编译器至少把这两种情况都当作警告。 |
2
9
首先,坏消息是,不能用另一个仅在返回类型上不同的函数重写或隐藏虚拟函数。然后,另一个坏消息,C++给你足够的绳子,以悬挂你自己在许多你以前没有考虑过的方式,你可以得到类似的效果:
诀窍在于,通过在派生类中定义具有相同名称和不同参数的方法,您实际上隐藏了基类(除非添加
注意,实际上并不是从对象中移除方法,而是将其隐藏在派生类中。如果通过指向基类的指针或引用调用该方法,则虚拟方法仍然存在,并将被调用。 |
3
1
首先,你不能重写
具有
因为它们的区别仅仅在于返回类型——这不会编译。 如果函数带有签名
是
有关虚拟函数的详细信息(以及更多!)你可以偷看 C++ FAQ Lite . |
4
1
|
5
1
从技术上讲,可以通过在派生类static中声明方法:
这听起来很奇怪,但是尝试一下-编译器会吃东西并发出警告。
覆盖将被忽略,并且
不过,你为什么需要那样的东西? |
6
0
不,不是真的。即使您引入一个中间类来创建继承的方法
|
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |