【问题标题】:C++ - defenition - private inheritance [duplicate]C ++ - 定义 - 私有继承[重复]
【发布时间】:2026-01-15 04:05:01
【问题描述】:

可能重复:
Private/protected inheritance

你能给我在C++ 中的私有继承的例子吗?据我了解,在这种继承中,父级的公共和受保护特征不会过滤子级,只有子级的公共特征是可见的。

【问题讨论】:

    标签: c++ oop


    【解决方案1】:

    私有继承
    基类的所有 Public 成员变为派生类的 Private 成员 &
    基类的所有Protected 成员都成为派生类的Private 成员。

    代码示例:

    Class Base
    {
        public:
          int a;
        protected:
          int b;
        private:
          int c;
    };
    
    class Derived:private Base   //Not mentioning private is OK because for classes it  defaults to private 
    {
        void doSomething()
        {
            a = 10;  //Allowed 
            b = 20;  //Allowed
            c = 30;  //Not Allowed, Compiler Error
        }
    };
    
    class Derived2:public Derived
    {
        void doSomethingMore()
        {
            a = 10;  //Not Allowed, Compiler Error, a is private member of Derived now
            b = 20;  //Not Allowed, Compiler Error, b is private member of Derived now
            c = 30;  //Not Allowed, Compiler Error
        }
    };
    
    int main()
    {
        Derived obj;
        obj.a = 10;  //Not Allowed, Compiler Error
        obj.b = 20;  //Not Allowed, Compiler Error
        obj.c = 30;  //Not Allowed, Compiler Error
    
    }
    

    如果您想了解继承和访问说明符,您可以在 this 上查看我很久以前发布的答案。

    【讨论】:

      【解决方案2】:

      私有继承通常用作组合的一种形式。它与拥有继承类型的成员变量没有太大区别。

      它的意思是“按照...实现

      在一些罕见的边缘情况下,它可能比使用成员变量更有效。

      我知道的最常见的私有继承用法是boost::noncopyable

      【讨论】: