struct Base{
virtual void foo(){
std::cout << "In Base\n";
}
};
struct Derived : public virtual Base{
virtual void foo() const{
std::cout << "In Derived\n";
}
};
Base* d = new Derived();
int main(int argc,char** args){
d->foo();
system("Pause");
}
当我运行此代码时,会打印“In Base”。为什么使用 const 说明符会改变继承?
const
改变了函数的签名。所以这是一个 overload不是 override .
如果你想确保不犯这些错误,你可以使用override。这将检测这些类型的不匹配并产生错误。
这将无法编译:
struct Base{
virtual void foo(){
std::cout << "In Base\n";
}
};
struct Derived : public virtual Base{
void foo() const override { // <==== ouch: error because it's a different signature
std::cout << "In Derived\n";
}
};
这将成功编译:
struct Base{
virtual void foo() const{
std::cout << "In Base\n";
}
};
struct Derived : public virtual Base{
void foo() const override { // <==== signatures do match
std::cout << "In Derived\n";
}
};