【发布时间】:2020-11-20 15:33:16
【问题描述】:
我正在尝试使用公共 C++ 库并将其扩展为我的目的。要扩展它,我需要在单个类中更改单个虚拟方法。我试图覆盖的方法是继承类的一部分。我基本上在下面的代码中发布了我需要做的事情。我真的不想重命名该函数,因为它在许多其他地方都使用过,而且我不想更改库的源代码,因为它适用于某些情况,但不适用于我的具体情况。
#include <iostream>
class Base {
public:
virtual void getName() = 0;
};
class Dynamic : public Base {
public:
virtual void getName() {
std::cout << "Wrong answer\n";
}
};
//Error in redefinition of class method
void Dynamic::getName() {
std::cout << "Right answer\n";
}
int main()
{
Dynamic mydynam;
mydynam.getName();
}
【问题讨论】:
-
你只能有一个
Dynamic::getName()的实现/定义。 -
您不能重新定义方法。是什么阻止您更改
Dynamic中的定义? -
您可以从
Dynamic派生并覆盖派生类中的方法。 -
如果你想扩展它,这个函数已经是虚函数了,它明确地允许你从
Dynamic(或者根据需要从Base)派生一个类并使用它。您需要做的就是确保通过指针或引用(Base *、Base &、Dynamic *、Dynamic &等)使用该类,并且您的代码将按预期工作。无论如何,您不能像那样简单地重新定义Dynamic::getName()- 只允许定义一个函数。
标签: c++ inheritance overriding virtual