【C++程序设计】-多态性和虚函数

来源:互联网 发布:淘宝客服怎么设置多个 编辑:程序博客网 时间:2024/06/05 20:00

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() {};//空的虚函数

原创粉丝点击