C++ 重写C+中的非虚方法+;
我有一个类C++ 重写C+中的非虚方法+;,c++,inheritance,methods,overriding,virtual-functions,C++,Inheritance,Methods,Overriding,Virtual Functions,我有一个类a和一个继承自a的类BA有一个foo方法,我想在B中覆盖该方法 class A { public: void foo(); ... } class B: public A { public: void foo(); ... } 解决这个问题的方法当然是将A::foo()定义为一个虚拟方法,将其声明为virtualvoidfoo()。但问题是我不能这样做,因为A类是在第三方库中定义的,所以我不想更改它的代码 经过一些搜索,我找到了关键字(因此B::fo
a
和一个继承自a
的类B
A
有一个foo
方法,我想在B
中覆盖该方法
class A {
public:
void foo();
...
}
class B: public A {
public:
void foo();
...
}
解决这个问题的方法当然是将A::foo()
定义为一个虚拟方法,将其声明为virtualvoidfoo()代码>。但问题是我不能这样做,因为A
类是在第三方库中定义的,所以我不想更改它的代码
经过一些搜索,我找到了关键字(因此B::foo
的声明将是void foo()override;
),但这对我没有帮助,因为,override
显然只能用于虚拟方法,以确保该方法确实重写了另一个方法,并且程序员没有犯错误,如果方法不是虚拟的,它会生成一个错误
我的问题是,如何在不更改A
的任何代码而只更改B
的代码的情况下实现与使A::foo
虚拟化相同的效果?如果基类的设计不支持虚拟分派,那么在不更改类的情况下,基本上是不能的-具体地说,它最好有一个虚拟析构函数。简单的回答是:你不能。C++不这样工作。@ NeilButterworth,我计划做的是添加<代码>::Foe:()代码>在B::foo
内部,因此B::foo
调用A::foo
和我需要的其他一些东西,所以我想做的事情不应该真正改变基类的行为。@Donald哦,这听起来是可行的,但它不会覆盖任何东西。“覆盖”意味着当您有一个指向基类型的指针或引用并调用基类的函数时,调用将转到派生类中定义的函数版本。如果您想这样做,那么必须将基类函数声明为virtual
。如果你想做其他的事情,那么你没有凌驾于此,你需要说出你想做什么。