【发布时间】:2015-11-30 17:37:46
【问题描述】:
我有一个受保护的方法Value。接下来,我在公共方法中重载它。为什么我可以这样做?我认为,这是违反封装的。
class Foo {
public:
Foo(int a) : m_a(a) {};
virtual ~Foo() {};
void PrintValue() {
std::cout << Value() << std::endl;
}
protected:
virtual int Value() {
return m_a;
}
private:
int m_a;
};
class Bar : public Foo
{
public:
Bar(int a, int b) : Foo(a), m_b(b) {};
virtual ~Bar() {};
int Value() override {
return m_b;
}
private:
int m_b;
};
int main(int argc, char** argv)
{
Bar b(10, 20);
b.PrintValue();
std::cout << b.Value() << std::endl;
return 0;
}
输出:
20
20
【问题讨论】:
-
如果不可能,没有什么能阻止我创建另一个调用受保护方法的公共方法。无论如何,您无法真正保护它。
-
你甚至不需要重写。派生类可以通过using declaration 公开继承的受保护方法。如果您不希望派生类看到某些内容,请将其设为私有。
标签: c++ overriding