【十二】初探继承

1、继承概念

面向对象中的继承指类之间的父子关系

  • 子类拥有父类的所有成员变量和成员函数
  • 子类就是一种特殊的父类
  • 子类对象可以当作父类对象使用
  • 子类可以拥有父类没有的方法和属性

示例:

class Parent
{
private:
  int a;
public:
  Parent()
  {
    a = 100;
  }
  void print()
  {
    cout << "a = " << a << endl;
  }
};

class Child : Parent   //继承自父类,默认为private继承
{

};

注意:
  继承时的访问级别设定会影响到成员的访问级别

  • C++中class的继承默认为private继承
  • private继承的子类拥有父类的所有成员
  • private继承使得父类的所有成员在子类中变为private成员

2、C++中的访问级别与继承

  • public继承
    • 父类成员在子类中保持原有访问级别
  • private继承
    • 父类成员在子类中变为private成员
  • protected继承
    • 父类的private和protected成员在子类中保持不变
    • 父类的public成员在子类中变为protected

修改上面的程序,在子类中添加新函数,如下:

class Child : Parent   //继承自父类
{
  void func()
  {
    a = 10;
    cout << "a = " << a << endl;
  }
};

尝试编译运行程序,会得到一些错误:
这里写图片描述

编译器告诉我们,父类中的a成员变量是私有的,在子类中无法被访问!

那么问题来了?如果想要一个成员变量在外界不能被访问,但是在其类中和其子类中都可以被访问,该怎么办?

新的成员修饰符:protected 受保护成员

 - protected成员可以在子类中被访问,但不能在外界被访问
 - protected成员的访问权限介于public和private之间

思考:
如何恰当的使用public,protected和private为成员声明访问级别??

类成员访问级别设置的原则

  • 需要被外界访问的成员直接设置为public
  • 只能在当前类中访问的成员设置为private
  • 只能在当前类和子类中访问的成员设置为protected

注意:
  private成员在子类中依然存在,但是却无法访问到。

3、继承与访问级别

父类的成员访问级别和子类的继承级别,共同决定了这些成员在子类中的访问级别,该访问级别有如下的公式:

公式:
继承成员对外的访问属性
= Max{ 继承方式, 父类成员访问级别 }

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值