【发布时间】:2009-05-20 17:52:08
【问题描述】:
class Base {
public:
void foo() const {
std::cout << "foo const" << std::endl;
}
};
class Derived : public Base {
public:
void foo() {
std::cout << "foo"<< std::endl;
}
}
我想确保 foo() const 对 Base 正确隐藏。是的,这是个坏主意,也许我应该让 Base::foo() const 成为纯虚拟,以要求 Dervied::foo() 正确覆盖——但是假设我不能让 Base::foo() const pure虚拟的。有没有更好的方法来确保 Base::foo() const 正确隐藏在 Derived 中?
编辑:我想确保在 Derived 中正确隐藏了基本实现。
【问题讨论】:
-
“正确隐藏”是什么意思?函数要么被覆盖,要么被隐藏。不能两者兼而有之。
-
您是否在问是否有某种方法可以获得与 c# override 关键字相同的行为?这个优秀的关键字确保该函数实际上覆盖了某些东西。由于函数签名的不同,当你打算不覆盖 C++ 中的某些内容时,这是一个简单的错误。
-
“隐藏”是指不公开吗?
-
正确隐藏是指我实际上是在Derived中隐藏了Base的foo实现。在上面的实现中,我实际上并没有隐藏实现,因为我错过了成本。
-
这就是所谓的“覆盖”。如果它不是虚拟的并且具有相同的名称,您无论如何都会隐藏它。如果它是虚拟的并且你得到正确的签名,那么你覆盖它,这意味着你不隐藏它。
标签: c++ polymorphism