C++学习总结Part1.7 面向对象之继承

一、继承

1、继承的概念
  • 继承是类与类之间的一种关系。如果类A继承于类B,则把类B称为基类(父类),类A称为派生类(子类)。
  • 继承需要符合is-a的关系,基类更通用更抽象,派生类更特殊更具体。
  • 比如说动物是一个类,食肉动物也是一个类。而动物有的特性食肉动物都有,也就是说食肉动物是动物(is-a),即食肉动物继承于动物。同理,当狮子看作一个类时,它也应当继承于食肉动物 。
2、继承的目的
  • 提高代码的重用性。因为派生类会拥有基类的所有特性,所以当写派生的时候就没有必要把基类相同基类相同功能的代码再写一遍。
  • 提高代码的可拓展性。派生类可以在基类的基础上添加新的代码,而且一个基类可以出现多个派生类
3、简单的继承

公有继承的子类声明:

二、继承相关

1、对象的构造和析构过程
  • 任何对象在创建后都会调用构造函数,在销毁之间才会调用析构函数。
  • 因为派生类对象除了本身成员之外还拥有基类的成员,所以派生类对象在创建时会调用父类的构造函数,销毁时调用父类的析构函数。
2、派生类的构造函数
  • 在定义派生类的构造函数是需要知道父类的构造函数,如果不指定则会调用父类的无参构造函数。
  • 派生类构造函数定义:

3、访问控制符
  • private:只有能在当前类成员函数中能够访问。
  • protected:只有在当前类成员函数和子类成员函数中能够访问。
  • public:即能在当前类成员函数,子类成员函数中访问,也能通过当前类对象,子类对象访问。
4、受保护继承和私有继承
  • 在c++中最常见的是公有继承,除了公有继承外,还有受保护继承和私有继承。
  • 在受保护继承中,派生类从基类继承下来的私有成员会隐藏,所有非私有成员才会变成保护成员。
  • 在私有继承中,派生类从基类继承下来的私有成员会隐藏,所有非私有成员都会变成私有成员。

三、虚拟继承

  • 虚拟继承是多重继承中特有的概念,是为了解决多重继承出现的菱形继承。
  • 比如,熊猫继承自类熊、浣熊,而熊、浣熊都继承自动物,则此时熊猫中会出现两次动物中的成员。
  • 为了节省内存,可以将熊、浣熊对动物的继承定义为虚拟继承,到此在熊和浣熊出现的继承体系中只会出现一份动物的实例。
1、虚函数的概念
  • 虚函数是指在类成员函数声明前加上virtual关键字的函数。
  • 当基类的成员函数无法满足子类要求的时候,我们可以将该成员函数声明为虚函数以供子类改写,虚函数的声明方式如下:

2、虚函数列表
  • 当一个类中出现了虚函数时,编译器会为这个类的对象多分配4个字节的空间用于存放虚函数列表。
  • 在虚函数列表中存放了所有虚函数的函数指针。
  • 当对象调用虚函数时,会优先从虚函数列表中寻找匹配的函数指针进行调用。
3、函数重写
  • 派生类可以对基类的虚函数进行重新声明定义,这种行为称之为函数重写。
  • 函数重写会将派生类对象继承自基类的虚函数列表部分进行重写。

四、纯虚函数和抽象类

1、纯虚函数的概念

纯虚函数是只需要声明,不需要定义的虚函数。声明方法如下 :

2、抽象类的概念
  • 有纯虚函数的类被称为抽象类。
  • 抽象类无法通过构造函数直接生成对象,只能够派生类继承。
  • 当抽象类被继承时,该类的所有纯虚函数必须在子类中重写,否则子类也将称为一个抽象类。
3、多态的概念
  1. 在面向对象语言中,接口的多种不同实现方式即为多态。
  2. 多态能允许将父对象设置成一个或更多个它的子对象的技术,赋值之后父对象就可以根据当前赋值给它的子对象的特性进行动作。
  3. 可以简单的理解为:将基类对象的指针或引用绑定到派生类对象上,此时基类的指针或引用就可以拥有派生类的特性。
4、通过函数重写实现多态

实现多态的步骤:

  • 第一步,派生类重写基类的虚函数。
  • 第二步,基类的指针或引用绑定到派生类的对象上。
  • 第三步,通过基类的指针或引用调用所绑定派生类重写过的函数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值