您的位置:首页 > 其它

类继承中的重载问题

2013-05-17 20:25 211 查看
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> 的隐式转换。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: