C++虚函数的陷阱--派生类对象的基类函数调用基类虚函数出错

本文通过实例展示了C++中派生类对象调用基类虚函数时可能出现的问题,即调用了派生类的重写版本而非基类的原版。在基类函数内部调用另一个虚函数时,如果不使用类限定符,可能会导致意外的派生类函数被调用。解决方法是在基类函数中明确指定使用基类版本的虚函数,如`Base::funB()`。
摘要由CSDN通过智能技术生成

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">最近写程序的时候发现,派生类对象的基类函数如果调用基类虚函数,则它将调用的是派生类的对应函数,而不是我想调用的基类的对应函数。</span>

下面用一个例子来说明:

//基类
class Base
{
public:
	void funA();
	virtual void funB();
protected:
private:
};

void Base::funA(){
	cout<<"这是Base类funA()"<<endl;
	funB();
}

void Base::funB(){
	cout<<"这是Base类funB()"<<endl;
}
//派生类
class Derivate :public Base
{
public:
	virtual void funB();
protected:
private:
};


void Derivate::funB(){
	cout<<"这是Derivate类funB()"<<endl;
}
我这里创建了一个基类Base和一个派生类Derivate,其中基类有一个函数funA()和一个虚函数funB()。派生类中,我重写函数funB()。

在Base::funA()中我调用了funB(),那么我想要调用的应该是Base::funB()。现在我们试写一下测试:

void main(){
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值