为什么纯虚函数看不到定义,却可以被使用

本人在编程的时候遇到个问题,在屏幕左边NearestNeighbors.h头文件内的class NearestNeighbors里定义了纯虚函数list函数,根据纯虚函数的定义, ((纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加“=0”))

在屏幕右边MYRRT.h头文件中,第197行代码实例化类生成了nn_

img

但在MYRRT.cpp中的第62行nn_->list()直接就是nn_调用了list函数。

本人的疑惑就是list纯虚函数的定义在哪,为什么没有定义就nn_可以直接调用list()函数

img

能调用,和可执行是两码事
我看了你这个头文件,确实是个纯虚函数,然后你居然用了这个类智能指针调用list
但是,你这个代码应该会出错
你纯虚函数也是虚函数,在虚函数表中会有定义,调用没问题,但运行会报错

虚函数是通过查找虚函数表来调用的,派生类实现了虚函数,那么该虚函数在这个类的虚函数表中的地址就被修改为这个派生类实现的函数地址。而每个拥有虚函数的对象,其对象首地址是一个指向虚函数表的指针。当创建一个派生类对象时,这个对象的虚函数表指针指向的时这个派生类的虚函数表。当用一个基类指针指向一个派生类对象时,这个基类指针访问的虚函数表实际上是派生类的虚函数表。因此通过基类指针调用虚函数,实际调用的是派生类实现的虚函数。

没有关系啊,这是个指针,抽象类是可以定义指针对象的,只需要给指针分配一个子类的对象地址就可以了。这里的nn_在赋值的时候一定是指向子类对象的,不会是纯虚类对象