欢迎光临散文网 会员登陆 & 注册

C/C++编程笔记:C++入门知识丨多态性和虚函数

2020-07-29 21:18 作者:C语言编程__Plus  | 我要投稿

本篇要学习的内容和知识结构概览


多态性

编译时的多态性称为静态联编. 当调用重载函数时, 在编译期就确定下来调用哪个函数.

运行时的多态性称为动态联编. 在运行时才能确定调用哪个函数, 由虚函数来支持.

静态联编中的赋值兼容性及名字支配规律

派生一个类的原因并非总是为了添加新的成员或成员函数, 有时是为了重新定义基类的成员函数。


在派生类有同名函数的情况下

Point * pPoint; // 声明的基类指针只能指向基类

Circle * pCircle // 声明的派生类指针只能指向派生类

如果派生类没有基类的同名函数, 派生类的指针才根据继承原则调用基类的函数

虚函数

一旦定义了虚函数, 该基类的派生类中的同名函数也自动成为虚函数.

虚函数的定义

用关键字virtual来声明一个虚函数, 虚函数只能是类中的一个成员函数, 不能是静态成员.

像这样:


虚函数实现多态性的条件

关键字virtual告诉编译器调用虚函数进行动态联编.

使用虚函数不一定产生多态性, 也不一定使用动态联编.

在调用中对虚函数使用成员名限定, 可以强制编译器对该函数使用静态联编.

产生运行多态性, 也就是动态联编有3个前提

(1)类之间的继承关系满足赋值兼容性规则

(2)改写了同名虚函数

(3)根据赋值兼容性规则使用指针(或引用)

像这样:


纯虚函数与抽象类

在基类中不给虚函数一个有意义的定义, 可以说明为纯虚函数, 将定义留给派生类去做

像这样:


抽象类:包含有纯虚函数的类称为抽象类. 一个抽象类至少有一个纯虚函数, 一个抽象类只能作为基类来派生新类, 不能说明抽象类的对象.


注意

空虚函数定义 virtual void area() {}

纯虚函数定义 virtual void area()  = 0;

纯虚函数的派生类仍是抽象类. 如果派生类中给出了基类所有纯虚函数的实现, 则该派生类不再是抽象类

类族

如果通过同一个基类派生一系列的类, 则将这些类总称为类族.

像这样:


多重继承与虚函数

多重继承可以被视为多个单一继承的组合。

总结

C++有两种多态性, 一种是编译时多态性, 也叫静态联编; 另一种是运行时多态性, 也叫动态联编. 这大大提高了我们解决问题的丰富性. 可能也是C++长久不衰的魅力所在吧! 我会继续深入学习C++, 继续挖掘语言的本质!

自学C/C++编程难度很大,不妨和一些志同道合的小伙伴一起学习成长!

学习C/C++编程知识,提升C/C++编程能力,欢迎关注UP一起来成长!
另外,UP在主页上传了一些学习C/C++编程的视频教程,有兴趣或者正在学习的小伙伴一定要去看一看哦!会对你有帮助的~

C/C++编程笔记:C++入门知识丨多态性和虚函数的评论 (共 条)

分享到微博请遵守国家法律