【发布时间】:2022-11-17 03:14:18
【问题描述】:
这纯粹是一个理论问题。我没有考虑特定的用例。
C++ 函数的虚拟性是否可以在类层次结构中的某个地方被抑制,或者一旦在基类中定义了一个虚拟函数,它在类层次结构的其余部分仍然是虚拟的?
我写了一些示例代码,试图抑制在类层次结构中定义的方法的虚拟性,但我没有成功。我的示例代码如下:
class Base {
public:
virtual void myFunc() {
std::cout << "myFunc in Base" << std::endl;
}
};
class Child : public Base {
public:
void myFunc() {
std::cout << "myFunc in Child" << std::endl;
}
};
class GrandChild : public Child {
public:
void myFunc() {
std::cout << "myFunc in GrandChild" << std::endl;
}
};
int main() {
Base* ptr = new GrandChild();
ptr->myFunc();
return 0;
}
输出如下:
myFunc in GrandChild
【问题讨论】:
-
一旦使用
virtual就无法回头 -
编号(此空格有意留空)
-
不 - 类似于你不能删除一个成员变量,因为这样就不会满足 is-a 关系 - 但你试图解决的问题是什么(即使它是理论上的)?
-
可能是 XY 问题?当使用继承的唯一真正原因是虚函数调度时,为什么要抑制它?
-
松散相关:您可以有一个模板库来指定您是否希望函数是虚拟的。
标签: c++