【C++基础】公有,私有和受保护的继承

本文详细介绍了 C++ 中的类继承与成员访问控制机制,包括 public、protected 和 private 继承的区别及其对基类成员访问的影响。通过具体示例展示了不同继承方式下成员的可见性变化。

对类所继承的成员的访问由基类中的成员访问级别和派生类派生列表中使用的访问标号共同控制。


派生类可以进一步限制但不能放松对所继承的成员的访问


  • public inheritance:基类成员保持自己的访问级别:基类的public成员为派生类的public成员,基类的protected成员为派生类的protected成员。
  • protected inheritance:基类的public和protected成员在派生类中为protected。
  • private inheritance:基类的所有成员在派生类中为private成员。


示例:

class Base
{
public:
    void basemen();                // public member
protected:
    int i;                         // protected member
	// ...
};

struct Public_derived : public Base
{
    int use_base() {return i;}     // ok; derived classes can access i
	// ...
};

struct Private_derived : private Base
{
    int use_base() {return i;}    // ok; derived classes can access i
};

Base b;
Public_derived d1;
Private_derived d2;
b.basemen();                     // ok;
d1.basemen();                    // ok; basemen is public in the derived class
d2.basemen();                    // error; basemen is private in the derived class


struct Derived_from_Private : public Private_derived
{
    // error; Base::i is private in Private_derived
	int use_base() {return i;}
};

struct Derived_from_Public : public Public_derived
{
    // ok; Base::i remains protected in Public_derived
	int use_base() {return i};
};


private inheritance:

  • private继承是实现继承,不是接口继承;
  • 如果classes之间的继承关系是private,编译器不会自动将一个derived class对象转换为一个base class对象;
  • private继承并不意味着is-a关系;
  • private继承在软件设计层面上没有意义,其意义只及于软件实现层面;

class Base  {  }; 
class Derived : private Base {  };

void test(Base* rhs){}

Base b;
Derived d;

test(&b); // ok;
test(&d); // error;



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值