【C++程序设计】-多态性和虚函数
2017-10-21 14:23
225 查看
1.多态性
静态联编所支持的多态性称为编译时的多态性动态联编所支持的多态性称为运行时的多态性,由虚函数来支持
2.静态联编
对象的内存地址空间中只包含数据成员,并不存储有关成员函数的信息3.动态联编
C++要实现动态联编,调用函数时必须使用派生类指针使用关键值virtual声明的函数,称为函数的虚函数;例如:virtual double area(){return 0}
派生类能继承基类的虚函数表,而且只要是和基类同名(参数也相同)的成员函数,无论是否使用virtual声明,它们都自动成为虚函数
4.虚函数
一旦基类定义了虚函数,该基类的派生类中的同名函数也自动成为虚函数虚函数只能是类中的一个成员函数,但不能是静态成员,关键字virtual用于类中该函数的声明中,如:virtual void fun();//声明虚函数
5.虚函数实现多态性的条件
关键字virtual指示C++编译器对调用虚函数进行动态联编,称为运行时的多态性产生运行时多态性前提:
类之间的继承关系满足赋值兼容兼容规则
改写了同名虚函数
根据赋值兼容性规则适用指针(或引用)
动态联编在运行时进行的,相对与静态联编,它的运行效率比较低,可以使程序员对程序进行高度抽象
6.构造函数和析构函数调用虚函数
见课本P172页7.纯虚函数
virtual函数类型 函数名(参数列表) = 0;一个类可以说明多个纯虚函数,包含有纯虚函数的类称为抽象类
一个抽象只能作为基类来派生新类,不能被实例化,但可以指向抽象类对象的指针
从一个抽象类派生的类必须提供虚函数的实现代码,或者在派生类中仍将它说明为纯虚函数(这种情况下,说明纯虚函数的派生类仍是抽象类)
派生类给出了基类所有纯函数的实现,则该派生类不再是抽象类
通过同一个基类派生一系列的类,则将这些类总称为类族
抽象类至少含有一个虚函数,而且至少有一个虚函数是纯虚函数,以便将它与空虚函数区分例如:
virtualvoid area()= 0;//纯虚函数
virtualvoid area() {};//空的虚函数
相关文章推荐
- C++程序设计-第14周 多态性与虚函数
- C++程序设计学习之『多态性与虚函数』
- 读书笔记--C++程序设计(第2版)--12多态性与虚函数(虚析构函数,纯虚函数与抽象类)
- C++之多态性与虚函数
- 谭浩强版C++实例 第六章 多态性与虚函数(4个)
- POJ C++程序设计 编程题#3 编程作业—多态与虚函数
- C++之多态性与虚函数
- 漫漫编程路——C++篇(八)——关于虚函数和多态性 (一)
- C++之多态性与虚函数
- C++学习7-面向对象编程基础(多态性与虚函数、 IO文件流操作)
- C++:多态性(虚函数)
- c++新手学习笔记之多态性和虚函数(1)
- 漫漫编程路——C++篇(八)——关于虚函数和多态性 (二)
- C++(不用virtual)模拟虚函数来表现出多态性
- C++之多态性与虚函数
- C++是如何利用虚函数实现多态性的?
- 多态与虚函数-编程题#1(C++程序设计第6周)
- 2013级C++第14周(春)项目——多态性、虚函数和抽象类
- C++之多态性与虚函数
- [022]c++虚函数、多态性与虚表