首先,对于令人困惑的标题感到抱歉。我不知道如何正确表达。
问题不是真正的问题,而是我不知道如何实现的问题。
代码如下:
#include <iostream>
class Parent
{
public:
virtual void foo()
{
std::cout << "Parent's foo" << std::endl;
}
void bar()
{
foo();
}
};
class Child : public Parent
{
public:
void foo()
{
std::cout << "Child's foo" << std::endl;
}
};
int main()
{
Child c;
c.bar();
return 0;
}
当上面的代码运行时,它会打印出Child's foo
。
但是相同的代码,但是子类 foo 定义为 void foo(bool def = true)
打印出 Parent's foo
。
如果定义不匹配,是否可以调用子版本的 foo 而不是父版本?
最佳答案
不幸的是,如果你想添加额外的参数,甚至是默认参数,你可以显式地创建一个重载函数,它在大多数情况下与调用者的行为相似。
#include <iostream>
class Parent
{
public:
virtual void foo()
{
std::cout << "Parent's foo" << std::endl;
}
void bar()
{
foo();
}
};
class Child : public Parent
{
public:
virtual void foo(bool def) // virtual if another subclass needs to override
{
std::cout << "Child's foo def = " << def << std::endl;
}
virtual void foo()override //override and virtual optional here
{
foo(true);
}
};
int main()
{
Child c;
c.bar();
c.foo();
c.foo(true);
return 0;
}
关于c++ - 调用重写虚方法的派生类调用父类方法调用了错误的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52558021/