我有一个受保护的方法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
答案 0 :(得分:1)
因为可见性/访问修饰符不会被继承。