为什么我可以在后继者中公开受保护的方法?

时间:2015-09-04 14:06:34

标签: c++ override

我有一个受保护的方法Value。在后继中,我在公共方法中重载它。我为什么这样做?我认为,这违反了封装。

Example:

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

1 个答案:

答案 0 :(得分:1)

因为可见性/访问修饰符不会被继承。