如果我有课时说
class Base {
public:
virtual void func() = 0;
};
这是其他两个类的基础
class DerivedA1 : public Base {
public:
virtual bool func(string command);
};
class DerivedB1 : public Base {
public:
virtual void func();
}
class DerivedA2 : public DerivedA1 {
public:
bool func(string command); //This one implements it differently
}; //its base class.
以上允许吗?我声明func()没有参数,但后来我用它参数。我的代码中有类似的情况我无法发布,因为这是学校作业的一部分,并且收到的错误类似于
error: no matching function for call to Base::fucn(std::string&)
note: candidate is: virtual bool Base::move();
note: candidate expects 0 arguments, provided 1
我希望func()在其不同的派生类中使用不同。我该如何解决这个问题?
答案 0 :(得分:2)
DerivedA1::func(string)
隐藏 Base::func()
。这是允许的,但不会覆盖Base::func
的行为。 clang会警告你这件事,因为它几乎总是一个错误
class DerivedA1 : public Base {
public:
virtual bool func(string command);
};
这很好:
class DerivedB1 : public Base {
public:
virtual void func();
}
这是重写DerivedA1::func(string)
。仅存在于DervivedA1
接口或从其派生的内容的虚函数。 Base
class DerivedA2 : public DerivedA1 {
public:
bool func(string command); //This one implements it differently
};