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

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

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

测试如下:

头文件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);   //子类无需和父类的虚函数保持一致,当然子类也可以不继承虚函数。
};

编译通过,如下:






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值