【C++】缺省参数和virtual函数造成的奇妙bug!

在C++中,当基类的虚函数带有缺省参数时,子类即使定义了不同的缺省参数,在多态调用中也会使用基类的参数。文章通过示例展示了如何在基类和派生类中定义带默认参数的虚函数,并指出当使用父类指针调用子类的虚函数时,子类的默认参数会被忽略,而使用子类指针则不受影响。
摘要由CSDN通过智能技术生成

1、当缺省参数和virtual函数一起使用的时候一定要谨慎

基类虚函数中的缺省参数会覆盖子类缺省参数。

#include <iostream>
using namespace std;
class Base {
public:
    virtual void func(int x , int y = 0) {
        cout << "Base::func(" << x << " ," << y << ")" << endl;
    }
};

class Derived1 : public Base {
public:
    virtual void func(int x, int y) {
        cout << "Derived1::func(" << x << " ," << y << ")" << endl;
    }
};

class Derived2 : public Base {
public:
    virtual void func(int x, int y = 1) {
        cout << "Derived2::func(" << x << " ," << y << ")" << endl;
    }
};


int main() {
    Base* p1 = new Derived1(); 
    Base* p2 = new Derived2(); 
    
    p2->func(3);//Derived2::func(3 ,0)
    p2->func(4);//Derived1::func(4 ,0),子类虚函数中的缺省参数被父类覆盖

}

输出结果:

Derived2::func(3 ,0)
Derived2::func(4 ,0)
Derived2::func(5 ,1)

可见,当用一个父类指针或引用指向子类对象,实现多态时,无论子类虚函数中的缺省值是什么,都会使用父类的缺省值。而子类指针指向子类对象则不受影响

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值