虚函数和纯虚函数的两个基础小问题

2025-01-19 12:16:03
推荐回答(3个)
回答1:

纯虚函数就是“强制”要求在派生出具体类的时候 必须定义出的函数,否则该派生类就无法定义具体对象 而虚函数则可重新定义也可以不重新定义
--说得对。

而仅仅站在使用的角度去说,虚函数和纯虚函数都可以实现多态的功能。
--说得对。

派生类如果继承了抽象基类中的纯虚函数,而在该派生类中没有对此纯虚函数进行定义 则该派生类扔为抽象类 不能用它实体定义对象
--说得对。

我的问题是:该派生类继承过来的纯虚函数在这个派生类中扔然为纯虚函数么??????
--说得对。

书上说不是...除非重新声明成纯虚函数...那是什么?虚函数??我又没有在这个派生类中具体定义继承过来的这个纯虚函数 为什么就不是纯虚函数了呢????
--其实,如果你不打算在某个派生类里实现基类的纯虚函数,那你最好连声明都别声明。如果声明了,那就加上=0。
如果不声明=0,编译器会将它视为非纯虚函数。
例如,基类Base有纯虚方法void Fun()=0
class C1: public Base
{
public: void Fun(); // 不写=0,也不写实现。
}

class C2: public C1
{
public: void Fun(){return;} //有实现了
}

这时你将无法实例化C2,因为C1的非纯虚函数没有实现,将产生连接错误。
Base *p = new C2;
C1 *p1 = new C2;
C2 *p2 = new C2;
这些都无法连接成功。

回答2:

同意 冰火梦幻 的看法。

当在父类里声明一个函数为虚函数后,那么你实例化一个对象后,如果调用这个函数的话,如果你在子类中定义了这个函数(不需加virtual)的话,那么就调用子类中的函数,父类中的就不调用了。 如果没有定义,就调用父类的函数。
定义了纯虚函数的类成为抽象类,该纯虚函数必须被赋值为0。
该抽象类无法实例化对象,仅该类的子类可以实例化对象,并且抽象类中的纯虚函数必须在子类中有定义。

回答3:

java对这个问题搞的很清楚,c++就在这边自己跟自己过不去