1、public 继承

class A : public B
(1)友元函数不能被继承
(2)protected成员可以被派生类和友元访问

2、派生类

(1)派生类构造函数如果未显式调用基类构造函数,则会隐式调用基类默认构造函数,没有则报错。
(2)派生类头文件中#include包含基类头文件
(3)派生类调用基类函数(已在派生类中重新定义过)
基类名::基类函数          如 B::b(...)
重新定义函数时一般会调用其基类函数,如果不加“基类名::”则会调用自己,形成无限递归。
(4)派生类有一个与基类中同名但签名不同的成员函数,那么会隐藏基类的那个成员函数。如:
基类A有一个成员函数  void go(int i)
派生类B有                  void go(int i, int j)
b.go(1)会编译报错参数太少。(如果派生类没有go函数,则会直接调用基类的)
(5)多层派生关系:构造函数会从基类->派生类的顺序调用,析构函数则相反。
(6)派生类不会继承基类的构造函数、析构函数和重载的运算符。

3、public/private/protected 继承

继承public基类:基类的public成员成为派生类public成员,protected成员成为派生类的protected成员,派生类不能直接访问基类private成员。
继承protected基类:基类的public、protected成员成为派生类的protected成员,派生类不能直接访问基类private成员。
继承private基类:基类的public、protected成员成为派生类的private成员,派生类不能直接访问基类private成员。

4、基类、派生类指针

(1)基类指针指向派生类对象,可以调用基类成员,调用派生类成员则报错,但可以将基类指针显式强转成派生类指针就可以调用了。所以句柄类型决定哪个类函数被调用。
(2)派生类指针指向基类对象,编译错误。

5、virtual

virtual void a(...)
当通过指针调用virtual函数,则不再根据句柄来决定,而是根据指针所指的对象的类型选择合适的函数调用。
(1)一个函数声明为virtual,那么从整个继承层次的那一点向下所有类中都保持virtual,即使派生类重载此函数时并没有显式的声明virtual。
所以重载最好也显式声明virtual。
(2)当virtual函数通过按名引用被调用,如a.b(),调用哪个函数在编译时已经决定,即静态绑定,并不是多态性行为。
因此动态绑定只能通过指针句柄来完成。

6、抽象类

通过声明类的一个或多个virtual函数为纯virtual函数,可以使一个类成为抽象类。
纯virtual函数  virtual void a(...) const = 0;
“=0”称为纯指示符。
派生类必须重载纯virtual函数,否则实例化时编译报错。

7、运行时类型信息RTTI(dynamic_cast\typeid\type_info)

dynamic_cast<class>(...)  向下强制类型转换
typeid(...)返回一个type_info对象的引用,其成员函数name()返回typeid实参的类型名称字符串(如“Class A”)。注意这个字符串与编译器有关,不同编译器可能不同。

8、virtual析构函数

删除一个派生类对象却使用基类指针,这样就无法调用派生类析构函数,会报行为未定义错误。
解决方法是声明基类析构函数为virtual,即使派生类析构函数与基类的不同名,也可以使这些析构函数为virtual函数,这时删除就能正常销毁。
(1)如果一个类会有virtual函数,就要提供一个virtual析构函数
(2)构造函数不能声明为virtual

c++学习笔记之继承和多态相关推荐

  1. c++学习笔记(13) 继承和多态

    继承:从已有的类派生出新类 基类和派生类 不同的类之间可能有很多共通的属性和行为,这些属性和行为允许在一个类中通用化并被其他类所共享.类C1从类C2扩展而来,则C1称为派生类,C2称为基类,基类也称为 ...

  2. C# 学习笔记(6) 多态

    C# 学习笔记(6) 多态 面向对象三大特性,封装.继承和多态,前两个很容易理解,但是多态就不好描述了,每个人对多态的看法可能都不一样,个人认为多态就是通过继承实现的不同对象调用相同方法,表现出不同行 ...

  3. C++学习笔记_04抽象类、多态 2021-04-15

    //C++学习笔记_04抽象类.多态 (多重继承的歧义性问题 和 virtual虚继承) #include<cstring> #include<cstdio> #include ...

  4. java学习笔记day09 final、多态、抽象类、接口

    java学习笔记day09 思维导图 final . 多态 . 抽象类 . 接口 (都很重要) 一.final 二.多态 多态中的成员访问特点⭐ [P237] 多态的好处 [P239] 多态的弊端 向 ...

  5. 判断类型是否继承_【Java学习 | Javase】继承与多态

    整理自:老师课件.<Java核心技术> 继承与多态 继承 概念 父类/超类 所有子集的公共域和公共方法的集合 子类 父类的特殊化,是对公共域和方法在功能.内涵方面的拓展和延伸 object ...

  6. 【java笔记】继承与多态

    多态性的前提:extends继承或者implements实现 继承与多态: 定义:同一个操作被不同类型对象调用时可能产生不同 的行为 解释:如果一个类有很多子类,并且这些子类都重写了父类中的某个方法, ...

  7. 2020.4.22课堂笔记(继承、多态、抽象类、抽象方法)

    在继承的情况下,子类的方法满足以下条件: 1.方法名相同 2.参数列表相同 3.返回值类型相同,或者是父类返回值类型的子类 4.访问修饰符的权限不能小于父类方法 5.抛出的异常不能大于父类(严于) 多 ...

  8. Java学习 day11 (继承与多态)接口、多态

    前言: 前天我们学习了继承,子类可以在父类的基础上重写父类内容,这样很容易误伤很多固定用法,已经写好的类,为了避免这种情况,java提供了final关键字,用来修饰不可改变内容. 我的理解是,类似于我 ...

  9. Java学习笔记09从认识多态开始

    Day09学习记录 目录 1.多态 2.抽象类 3.接口 1.1多态的概念 某一个事物,在不同时刻表现出来的不同状态. 在使用多态时要注意: a.要有继承关系 b.要有方法重写 c.要有父类引用指向子 ...

最新文章

  1. idea创建包怎么让包分层_开一家早餐店卖生煎包怎么样
  2. SSM(Spring4.x.x+SpringMVC4.x.x+Mybatis3.4.x)框架整合
  3. keepalived基础及使用DR模型构建一个real_server
  4. 缓存机制 java_缓存机制:java中缓存的原理
  5. 「JOISC 2020 Day4」治疗计划(线段树+dijkstra最短路)
  6. php 获取key的位置,PHP获取当前所在目录位置的方法
  7. 除了uni-app可以做app外,flutter更接近原生开发应用
  8. Warning: bind(): React component methods may only be bound to the component instance. See ...
  9. Java中String.split和StringUtils.split性能比较
  10. 狗不理是怎样混到狗都不理的?
  11. shaderop的定义
  12. eclipse如何开发python
  13. linux错误—2.man:command not found
  14. 跳板机+谷歌验证码 ssh 自动登录
  15. python自回归_【时间序列】自回归模型
  16. JAVA 如何控制模拟表单提交_java后端模拟表单提交
  17. MYSQL去重方法汇总
  18. 技术团队管理者的软技能(上):关于团队文化和领导力
  19. 用java编程实现java代码的次行代码风格转化为尾行代码风格
  20. 广域网技术-PPP协议

热门文章

  1. 谁是最好的Coder
  2. 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(2):处理异步调用中的异常...
  3. 六、springcloud之配置中心Config
  4. [洛谷P1040] 加分二叉树
  5. 划船训练常见错误:含胸驼背肩胛骨活动不足
  6. ReactNative的基本组件的认识
  7. JQuery学习使用笔记 -- JQuery插件开发
  8. leetcode 之Single Number(13)
  9. 网站大访问量优化整体思路
  10. linux lnmp1.5 部署laravel项目