简介:多态分为静态多态,和动态多态。多态这个概念通过类中的函数体现,那么对于函数要体现多态,就要在函数前加上关键字virtual,使得函数成为虚函数,这样我们才能在C++中了解多态机制。(简单来说多态的本质就是:对继承下来的函数进行新的改造。以此实现代码的复写。------你们全家要制造飞机,你爸爸制造了飞机的外形,你要在你爸爸的基础上制造飞机的引擎,你的儿子要在你的基础上学会如何驾驶飞机。)
首先,对多态的静态和动态,我们先来进行理解:区分静态和动态的一个标准;在编译时知道运行结果的叫静态,在编译时不清楚,在运行时才知道结果的叫动态。
静态多态:彼此单独定义但支持共同操作的具体类。(如果不明白这个知识点,自己去百度)
虚函数:对于多态的表现,虚函数是我们了解的重点。类中的成员函数,并在返回值前加关键字virtual,这个成员函数就是虚函数。
- 虚函数不能是内联,静态,友元函数(静态函数不是成员函数,不属于类)
- 虚函数只能在声明中写。不能再函数调用时写。(即在函数前加不加virtual)
- 虚函数无论被公有继承多少次,仍然保持虚函数的特性(虚函数被继承后还是虚函数)
- 如果类中有一个成员函数被说明为虚函数,意味着在派生类中有这个同名函数的不同实现。
- 定义了虚函数之后,程序中声明的指向基类的指针可以指向派生类的成员函数。
虚函数的特性:
- 在类中有虚函数存在,不管有多少个virtual,类的内存多四个字节(指针)
- 类中有虚函数存在,在这个类内存的前面的四个字节为函数指针数组,指向虚函数成员列表
- 基类中有虚函数存在,那么派生类中的同名函数可以不用加关键字,但是它也是虚函数
- 虚函数成员列表本身不能被继承,但这个虚函数的成员列表中的成员能够被继承
- 派生类中如果有同名的虚函数,会覆盖掉继承下来的基类的列表成员(多态的重写)
类中的成员函数有两种访问方式
- 如果没有虚函数,通过对象或对象指针的类型去访问
- 如果有虚函数,通过类对象中的前面四个字节去访问(即虚函数列表的首地址)
纯虚函数:作为接口存在,有虚函数的类叫做虚基类
抽象基类不能实列化对象,只能通过派生类继承,在派生类中重写纯虚函数,如果派生类也不重写,那么派生类将继续作为抽象基类存在。
#include<iostream> using namespace std; class A{ public: virtual void run() = 0; int getA(int a){ return a; } }; class B :public A{ public: virtual void run() = 0; }; int main(){ }
021--C++多态的基本概念
最新推荐文章于 2024-09-04 16:45:00 发布