RSS

C++ 虚函数和纯虚函数的区别 | 菜鸟教程

C++纯虚函数定义纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。

*2、虚函数声明如下:virtualReturnTypeFunctionName(Parameter);虚函数必须实现,如果不实现,编译器将报错,错误提示为:errorLNK****:unresolvedexternalsymbol”public:virtualvoid__thiscallClassName::virtualFunctionName(void)”*3、对于虚函数来说,父类和子类都有各自的版本。

纯虚函数的意义,让所有的类对象(主要是派生类对象)都可以执行纯虚函数的动作,但类无法为纯虚函数提供一个合理的缺省实现。

虚函数联系到多态,多态联系到继承。

必须先使用基类指针指向子类型的对象,然后直接或者间接使用基类指针调用虚函数。

在基类的类定义中定义虚函数的一般形式:virtual函数返回值类型虚函数名(形参表)),在派生类中重新定义的函数应与虚函数具有相同的形参个数和形参类型。

通过该指针变量调用此虚函数,此时调用的就是指针变革指向的对象的同名函数。

在了解虚函数的基础之上,我们考虑这样的问题:一个基类指针必须知道它所指向的对象是基类还是继承类的示例,才能在调用虚函数时自动决定应该调用哪个版本,它是如何知道的?有些讲C++的书上提到,这种动态联编的机制是通过一个vtable实现的,vtable是什么?微软在关于COM的文档里这样描述:**vtable****是指一张函数指针表,如同****C++****中类的实现一样,****vtable****中的指针指向一个对象支持的接口成员函数。

这句话也可以反过来说:如果你发现基类提供了虚函数,那么你最好override它。

纯虚函数关注的是接口的统一性,实现由子类完成。

所以派生类实际上刻画了一组子类的操作接口的通用语义,这些语义也传给子类,子类可以具体实现这些语义,也可以再将这些语义传给自己的子类。

,”

在上面的代码中,寄存器ECX保存的就是这个this指针,同时它的值又赋给了寄存器EAX。

虚基类子对象是由最远派生类的构造函数通过调用虚基类的构造函数进行初始化的。

_**_虚函数表_**_对_C++_了解的人都应该知道虚函数(_VirtualFunction_)是通过一张虚函数表(_VirtualTable_)来实现的。

首先来说一下虚函数的关键字virtual:virtual用来修饰类的成员函数,被virtual修饰的函数就叫做虚函数。


Your Comment