c++ - 为什么我可以在后继者中公开 protected 方法?

标签 c++ overriding

<分区>

我有一个 protected 方法 Value。在继任者中,我在公共(public)方法中重载了它。为什么我可以这样做?我认为,这是违反封装的。

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

最佳答案

因为可见性/访问修饰符不是继承的。

关于c++ - 为什么我可以在后继者中公开 protected 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32400129/

相关文章:

java - java中如何使用桥接技术实现协变方法覆盖

c++ - 在 BST 中插入一个具有全局根的节点

c++ - Visual Studio MFC C++ "CFormView"从 "base class"下拉列表中丢失

c++ - 许多嵌套 std::conditional_t 的替代品?

c++ - 如何在不指定模板的情况下声明函数模板指针typedef?

objective-c - 重写setter方法并获取“xxx的本地声明隐藏实例变量”

c# - AccessibleObjectFromPoint 返回客户端对象而不是复选框

ruby-on-rails - 覆盖设计注册创建方法

java - 类不是抽象的并且不会覆盖 Java 中的错误

c++ - 多级继承 C++