一同 两 不同
不同子类对象,同一消息,不同操作
参考文章
https://blog.csdn.net/qq_39412582/article/details/81628254
1. 虚函数、非虚函数 在父类、子类之间的调用
(1)同名函数几种情况
- 虚函数 virtual
- 一个在父类一个在子类
重写 - 同在父类 或 同在子类
重载
- 一个在父类一个在子类
- 非虚函数
- 一个在父类一个在子类
重载 - 同在父类 或 同在子类
重载
- 一个在父类一个在子类
问题集 1. override 关键字 在函数声明后面出现,是否可以在函数定义的后面? override是重写,所以一般出现在子类 重写父类 的虚函数 。
参考文章
https://blog.csdn.net/qq_33169689/article/details/101721404
https://blog.csdn.net/liyuye/article/details/9570051
2. 父子类 贡 外部而言 和 内部而言
(1)外部而言
①基本用法_1
父类指针 ---> 虚函数(参数列表)
②关键指标
父类指针 指向哪个 子类。(1)如果指向的子类重写了这个被调用的虚函数,则就调用子类中被重写的虚函数;(2)如果指向的子类没有重写这个被调用的虚函数,则就调用父类本身的虚函数。
①基本用法_2
父类指针 ---> 非虚函数(参数列表)
②关键指标
?
是否还需要看 子类 是否重载了 这个函数?
如果结果还是和上面 一致,则 关键字 Virtual 的意义 何在?
(2)内部而言
是否需要加上, 类名:: ?
① 子类函数体 具体定义部分,可直接调用父类非虚函数?
②如果调用的这个函数,子类 重载 了呢?
(1)如果这个非虚函数,在子类中 没有重载,可以在子类函数体具体定义部分中,直接写这个 非虚函数的函数名,就可以调用到父类 这个非虚函数。(已实践证明); (2)如果这个非虚函数,在子类中 被重载,???
①子类函数体 具体定义部分,可直接调用父类虚函数?
②如果调用的这个 虚函数,子类 重写 了呢?