送给大家一句话:
一个犹豫不决的灵魂,奋起抗击无穷的忧患,而内心又矛盾重重,真实生活就是如此。 – 詹姆斯・乔伊斯 《尤利西斯》
_φ(* ̄ω ̄)ノ_φ(* ̄ω ̄)ノ_φ(* ̄ω ̄)ノ
_φ(* ̄ω ̄)ノ_φ(* ̄ω ̄)ノ_φ(* ̄ω ̄)ノ
_φ(* ̄ω ̄)ノ_φ(* ̄ω ̄)ノ_φ(* ̄ω ̄)ノ
从零开始认识多态
- 1 前言
- 2 什么是多态
- 3 多态的构成
- 3.1 协变
- 3.2 析构函数的重写
- 3.3 语法细节
- 3.4 C++11 override 和 final
- 3.5 重写(覆盖) - 重载 - 重定义(隐藏)
- 4 多态的底层实现
- 4.1 底层实现
- 4.2 验证虚表
- 5 抽象类
- 6 多继承中的多态
- 一般的多继承
- 菱形继承和菱形虚拟继承
- Thanks♪(・ω・)ノ谢谢阅读!!!
- 下一篇文章见!!!
1 前言
面向对象技术(oop)的核心思想就是封装,继承和多态。通过之前的学习,我们了解了什么是封装,什么是继承。
封装就是对将一些属性装载到一个类对象中,不受外界的影响,比如:洗衣机就是对洗衣服功能,甩干功能,漂洗功能等的封装,其功能不会受到外界的微波炉影响。
继承就是可以将类对象进行继承,派生类会继承基类的功能与属性,类似父与子的关系。比如水果和苹果,苹果就有水果的特性。
接下来我们就来了解学习多态!
2 什么是多态
多态是面向对象技术(OOP)的核心思想,我们把具有继承关系的多个类型称为多态类型,通俗来讲:就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。
举个例子:就拿刚刚结束的五一假期买票热为例,买票这个行为,当普通人买票时,是全价买票;学生买票时,是半价买票;军人买票时是优先买票。同样一个行为在不同的对象上就有不同的显现。
多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。
#include using namespace std; class Person { public: virtual void BuyTicket() { cout public: virtual void BuyTicket() { cout p.BuyTicket(); } int main() { Person p; Student s; //同一个函数对不同对象有不同效果 Func(p); Func(s); return 0; } }; class B : public A {}; //这里明显返回类型不同但是结构仍然正常 class Person { public: virtual A* BuyTicket() { cout public: virtual B* BuyTicket() { cout public: ~Person() { cout public: ~Student() { cout Person p; Student s; return 0; } //Person p; //Student s; //基类可以指向基类 也可以指向派生类的基类部分 Person* p1 = new Person ; //通过切片来指向对应内容 Person* p2 = new Student; delete p1; delete p2; return 0; } public: ~Person() { cout public: Student() { int* a = new int[100000000]; } ~Student() { cout for(int i = 0; i