类继承中的重载问题

exceptional C++ 上看来的。

#include <iostream>
#include <complex>
using namespace std;

class base{
public:
    void f(int){
        cout<<"f(int)"<<endl;
    }
    void f(double){
        cout<<"f(double)"<<endl;
    }
};

class derived : public base{
public:
    //不同作用域
    using base::f;
    void f(complex<double> ){
        cout<<"complex<double>"<<endl;
    }
};

int main()
{
    derived d;
    d.f(1.0);
    return 0;
}

基类与派生类的函数并不是默认在同样的作用域中。 如果派生类与基类的函数名相同,那么派生类的函数会直接覆盖基类的函数。

 如果试图令基类与子类的函数重载, 就需要利用

using base::f 这个语句。

在上面的代码中,如果没有这个语句, 程序的输出会是

complex<double>, 因为C++不会将这个调用与基类的函数进行匹配。 这个结果的产生是由于double 到 complex<double> 的隐式转换。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值