c++学习笔记-----继承与多态

本文详细介绍了C++中的继承和多态。在继承部分,涵盖了概念、访问方式、对象赋值转换、作用域、默认成员函数、静态成员以及菱形继承。多态部分讨论了概念、条件、虚函数重写、C++11的override和final关键字,以及多态原理。通过深入探讨这些主题,帮助理解C++面向对象编程的关键特性。
摘要由CSDN通过智能技术生成

目录

 

一、继承

(一)概念

(二)父类在子类中的访问方式

(三)基类和派生类对象赋值转换

(四)继承中的作用域(也是一个C++缺陷)

(五)派生类的默认成员函数

(六)继承与静态成员

(七)菱形继承

1.概念

2.菱形虚拟继承内存中体现

二、多态

(一)概念

(二)多态的条件及虚函数的重写(指向谁调用谁的虚函数)

(三)C++11 override 和 final

(四)重载、覆盖(重写)、隐藏(重定义)的对比

(五)抽象类

1.概念

2.接口继承和实现继承

(六)多态的原理

1.虚函数表

2.虚函数表指针(简称虚表指针)

3.什么是多态?


一、继承

  • 面向对象三大特性:(严格来说不止三种)最重要三种封装、继承、多态,        其他:抽象、反射(Java)。
  • 封装本质是一种更好的管理,相比c语言面向过程,数据和方法都放到类中进行管理,在通过访问限定符进行限制。
  • 相对C语言面向过程,数据和方法都放到类中进行管理,再通过访问限定符进行限制。

(一)概念

继承是为了从类设计的角度避免重复定义数据和方法,进行类角度的复用。

(二)父类在子类中的访问方式

  1. 在子类的访问方式=权限min(基类的访问方式,继承方式)public>protected>private
  2. 基类的private成员,在子类中都不可见。本质意义是说,我想在子类中用父类变量就不能用,但是通过父类函数调用父类私有参数就可以用。常考考点!!!
  3. 语法层面不能对变量改,可以取地址,强转int*就可以改。
  4. 继承的protected变量可以在类里用,不能在类外用。
  5. 想让子类用就定义公有或者保护,不想让子类用就定义保护,保护和公有区别就是保护不能在类外用,公有可以在类外用。
  6. 想复用就定义公有,想在类内随便用就定义保护。
  7. 最常用的是两种,公有继承父类的公有和保护成员。保护继承和私有继承最不常用。
  8. class默认继承方式是私有,struct默认继承方式是公有。

(三)基类和派生类对象赋值转换

int main()
{
  Person=p;
  Student=s;
  p=s;   //子类对象赋值给父类对象,切割切片。
  return 0;
}
  1. p基类   s子类   p=s   子对象赋值给父类对象 ,存在切割、切片。
  2. 引用和指针都是一样   切割切片。
  3. 父类的指针或者引用是可以转回子类类型指针或者引用,但是子类无法转回父类,不安全存在风险。

  4. 指针的意义就是看能否看到几个字节空间,比如int*只能看到4个字节空间,char*只能看到一个字节空间。基类指针指向父类相当于看到的空间多了,但是能正常访问,子类指针转回父类,相当于多看到空间了,存在越界。

  5. 所有讲的赋值继承都只存在与公有继承,比如父类原本是公有,通过保护继承子类变成保护继承,如果在赋值后,父类成员是公有的,子类成员是私有的,就矛盾了。私有和保护继承是不存在的。所以实际中很少使用私有和保护继承。

(四)继承中的作用域(也是一个C++缺陷)

  1. 在继承体系中基类和派生类都有独立的作用域。
  2. 需要注意的是如果是成员函数的隐藏,只需要函数名相同就构成隐藏。
  3. 注意在实际中在继承体系里面最好不要定义同名的成员。
  4. 重载(函数重载,函数名必须在同一作用域)     重写(覆盖)     重定义(隐藏,函数名相同是在不同作用域将会构成隐藏)。
  5. 子类和父类中有同名成员,子类成员将屏蔽父类对同名成员的直接访问,这种情况叫隐藏,也叫重定义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ishao97

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值