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

the protected and private member variables in C++ inheritance

我是C++的新手,我有一个关于继承中的c++保护成员和私有成员的问题。

如果一个class是public继承一个基础的class,受保护的私有成员变量是否会成为派生class的一部分?

例如:

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

class Derived: public Base
{

};

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

没有 class 可以访问 private 变量。甚至不低于 classes.

只有子classes 可以访问protected 变量。

所有 classes 都可以访问 public 个变量。

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

正在声明与 Base class 成员同名的成员 "shadows" Base class 成员。也就是说,Derived class 有自己的自变量,恰好与基础 class 版本同名。

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

class 的私有成员可以继承,但不能由其派生的 class 直接访问。可以使用 public 或基 class.

的受保护方法访问它们

继承模式指定派生的 classes 如何访问受保护和 public 数据成员。

如果派生class在private模式下继承基础class,

  1. 基 class 的受保护成员是派生 class.
  2. 私有 成员
  3. public 基 class 的数据成员是派生 class.
  4. 私有 成员

如果派生class在保护模式下继承基class,

  1. 基 class 的受保护成员是派生 class.
  2. 受保护 成员
  3. public 基 class 的数据成员是 protected 派生 class.
  4. 的成员

如果派生的class在public模式下继承基础class,

  1. 基 class 的受保护成员是派生 class.
  2. 受保护 成员 基 class 的
  3. public 数据成员是派生 class.
  4. public 成员

请参阅此 link 以获得更多说明: http://www.tutorialspoint.com/cplusplus/cpp_inheritance.htm

没有派生 class 可以访问其私有基 class 的属性或方法。它只能访问 public 或受保护的。即使在 settergetter 中定义了 base class,访问 base class.

的成员时仍然出错
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 
}; 

下面的table总结了以上三种模式,展示了subclass中baseclass的成员在派生于public时的访问说明符,protected和私人模式:

https://imgur.com/a/yaQjFOJ

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

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


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

};

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

子 class 无法访问父 class

的私有成员