类继承中的重载问题

来源:互联网 发布:pc蛋蛋预测php源码 编辑:程序博客网 时间:2024/05/23 01:20

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> 的隐式转换。