子类继承父类,重写纯虚函数和虚函数时注意

        今天遇到这么个问题,程序中定义了一个借口类,成员函数全是纯虚函数,我写的子类继承了这个接口类,但是报错提示说:无法实例化抽象类!

原因是这样的:子类继承父类时,必须重写父类的纯虚函数,函数名、返回类型、参数个数和类型都不能改。若父类中的虚函数自己有定义,子类也可以不重写。

测试如下:

头文件test.h

#pragma once
#include "iostream"
using namespace std;

class FATHER
{
public:
	virtual void print(int a)=0;  //纯虚函数,子类需重写。
	//virtual void print(int a);
};

class CHILD : public FATHER
{
public:
    int print(double d);
};


在头文件里我定义了一个父类和子类,其中父类的成员函数print是纯虚函数,子类定义的print函数和父类在返回值和参数类型不一样。再看看下面的测试代码,实例化了一个子类,并调用了其成员函数,可以编译成功吗?


可以看到报错了:纯虚函数没有定义!

将子类的print函数的返回值和参数类型保持和父类一致就可以编译通过了。


当父类的成员函数式虚函数时,即父类对虚函数有定义时,子类可以进行重载,不需要完全和父类的虚函数保持一致,如下:

#pragma once
#include "iostream"
using namespace std;

class FATHER
{
public:
	//virtual void print(int a)=0;  //纯虚函数,子类需重写。
    virtual void print(int a);
};

class CHILD : public FATHER
{
public:
    int print(double d);   //子类无需和父类的虚函数保持一致,当然子类也可以不继承虚函数。
};

编译通过,如下:






展开阅读全文

没有更多推荐了,返回首页