|
知识路径: > 嵌入式系统软件基础知识 > 嵌入式系统程序设计 > 嵌入式程序设计语言 > 嵌入式C/C++程序设计要求 > C++程序设计基础 > 继承与多态 >
|
相关知识点:2个
|
|
|
|
面向对象程序设计的核心是多态性(polymorphism),简单来说就是“一个接口,多种方法”,程序在运行时才决定所调用的函数。
|
|
|
在派生类中可以定义一个与基类同名的函数,也就是说为基类的成员函数提供了一个新的定义,在派生类中的定义与在基类中的定义有完全相同的方法签名(即参数个数与类型均相同)和返回类型,对于普通成员函数,这称为重置(或覆盖);而对于虚成员函数,则称之为实现。
|
|
|
多态也称为动态绑定或迟后绑定,因为到底调用哪一个函数,在编译时不能确定,而要推迟到运行时确定。也就是说,要等到程序运行时,确定了指针所指向的对象的类型时才能够确定。
|
|
|
函数调用是通过相应的函数名来实现的。将源程序进行编译后并加载到内存执行时,函数实际上是一段机器代码,它是通过首地址进行标识和调用的。在C++中,函数调用在程序运行之前就已经和函数体(函数的首地址)联系起来。编译器把函数体翻译成机器代码,并记录了函数的首地址。在对函数调用的源程序段进行编译时,编译器知道这个函数名的首地址在哪里(它可以从生成的标识符表中查到这个函数名对应的首地址),然后将这个首地址替换为函数名,一并翻译成机器码。这种编译方法称为早期绑定或静态绑定。
|
|
|
当用基类指针调用成员函数时,是调用基类的成员函数还是调用派生类的成员函数,这由指针指向的对象的类型决定。也就是说,如果基类指针指向基类对象,就调用基类的成员函数;如果基类指针指向派生类对象,就调用派生类的成员函数。这就要用到另外一种方法,称为动态绑定或迟后绑定。
|
|
|
在C++中,动态绑定是通过虚函数来实现的。虚函数的定义很简单,只要在成员函数原型前加一个关键字virtual即可。如果一个基类的成员函数定义为虚函数,那么它在所有派生类中也保持为虚函数,即使在派生类中省略了virtual关键字。要达到动态绑定的效果,基类和派生类的对应函数不仅名字相同,而且返回类型、参数个数和类型也必须相同。
|
|
|
仅定义了函数而没有函数实现的虚函数称之为纯虚函数。定义纯虚函数的方法是在虚函数参数表右边的括号后加一个“=0”的后缀,例如:
|
|
|
|
含有纯虚函数的类,称之为抽象类。C++不允许用抽象类创造对象,它只能被其他类继承。要定义抽象类,就必须定义纯虚函数,它实际上起到一个接口的作用。
|
|
|
对虚函数的限制是:只有类的成员函数才可以是虚函数;静态成员函数不能是虚函数;构造函数不能是虚函数,析构函数可以是虚函数,而且常常将析构函数定义为虚函数。
|
|
|