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
。如果你想做其他的事情,那么你没有凌驾于此,你需要说出你想做什么。