C ++继承中的protected和private成员变量

时间:2015-04-02 08:58:06

标签: c++ inheritance access-control

我是C ++的新手,我对继承中的c ++受保护和私有成员有疑问。

如果一个类是public,则继承一个基类,protected和private成员变量是否属于派生类?

例如:

class Base
{
   protected: 
       int a;
       int b;
   private:
       int c;
       int d;
   public;
       int q;
};

class Derived: public Base
{

};

类Derived是否也拥有a, b, c, d, q的所有成员?我们可以在Derived类中将int a定义为public,protected和private吗?

6 个答案:

答案 0 :(得分:3)

没有类可以访问private个变量。甚至不是子类。

只有子类可以访问protected个变量。

所有课程都可以访问public变量。

答案 1 :(得分:2)

基类的所有成员都是派生类的一部分。但是,派生类只能访问公共或受保护的成员。

声明一个与Base类成员同名的成员" shadows" Base类的成员。也就是说,Derived类有自己的独立变量,恰好与基类版本具有相同的名称。

这是个人选择,但我发现使用变量在基类和派生类之间进行通信会导致代码更加混乱,因此我倾向于将成员变量设为私有或使用PIMPL模式。

答案 2 :(得分:0)

类的私有成员可以继承,但不能由其派生类直接访问。可以使用基类的公共或受保护方法访问它们。

继承模式指定派生类如何访问受保护和公共数据成员。

如果派生类以私有模式继承基类,

  1. 受保护的基类成员是私有派生类的成员。
  2. 基类的公共数据成员是派生类的私有成员。
  3. 如果派生类以受保护的模式继承基类,

    1. 受保护的基类成员是受保护的派生类的成员。
    2. 基类的公共数据成员是受保护的派生类的成员。
    3. 如果派生类以公共模式继承基类,

      1. 受保护的基类成员是受保护的派生类的成员。
      2. 基类的公共数据成员是公共派生类的成员。
      3. 请参阅此链接以获得更多说明: http://www.tutorialspoint.com/cplusplus/cpp_inheritance.htm

答案 3 :(得分:0)

没有派生类可以访问其私有基类的属性或方法。它只能访问公共或受保护的目录。即使settergetter 在 基类,访问基类成员仍然会出错。

答案 4 :(得分:0)

class A  
{ 
public: 
    int x; 
protected: 
    int y; 
private: 
    int z; 
}; 
  
class B : public A 
{ 
    // x is public 
    // y is protected 
    // z is not accessible from B 
}; 
  
class C : protected A 
{ 
    // x is protected 
    // y is protected 
    // z is not accessible from C 
}; 
  
class D : private A    // 'private' is default for classes 
{ 
    // x is private 
    // y is private 
    // z is not accessible from D 
}; 

下表总结了上述三种模式,并显示了以公共,保护和私有模式派生时子类中基类成员的访问说明符:

https://imgur.com/a/yaQjFOJ

https://www.geeksforgeeks.org/inheritance-in-c/

答案 5 :(得分:0)

class A{
protected:
    int a {9723999};
};


class B:public A{
public:
    B(){
        cout<<a<<endl;
    }

};

int main()
{
    B b;
    return 0;
}

子类不能访问父类的私有成员