rat*_*zip 6 c++ inheritance access-control
我是C ++的新手,我对继承中的c ++受保护成员和私有成员有疑问。
如果一个公共类继承了一个基类,那么受保护的私有成员变量是否将成为派生类的一部分?
例如:
class Base
{
protected:
int a;
int b;
private:
int c;
int d;
public;
int q;
};
class Derived: public Base
{
};
Run Code Online (Sandbox Code Playgroud)
派生类也有所有成员a, b, c, d, q吗?我们可以int a在派生类中将a定义为public,protected和private吗?
小智 11
基类的所有成员都是派生类的一部分。但是,派生类只能访问公共或受保护的成员。
声明一个与基类成员同名的成员“影子”了基类的成员。也就是说,派生类有自己的独立变量,该变量恰好与基类版本具有相同的名称。
这是个人选择,但我发现使用变量在基类和派生类之间进行通信会导致代码更加混乱,因此我倾向于将成员变量设为私有或使用 PIMPL 模式。
类的私有成员可以被继承,但不能被其派生类直接访问。可以使用基类的公共或受保护方法访问它们。
继承模式指定派生类如何访问受保护和公共数据成员。
如果派生类在私有模式下继承基类,
如果派生类在保护模式下继承基类,
如果派生类在公共模式下继承基类,
有关更多说明,请参阅此链接:http : //www.tutorialspoint.com/cplusplus/cpp_inheritance.htm
小智 6
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
};
Run Code Online (Sandbox Code Playgroud)
下表总结了上述三种模式,并显示了在 public、protected 和 private 模式下派生时子类中基类成员的访问说明符:
https://i.stack.imgur.com/AIncv.jpg
https://www.geeksforgeeks.org/inheritance-in-c/