类继承中的重载问题
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> 的隐式转换。
#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> 的隐式转换。
相关文章推荐
- 一道Java程序输出题(继承-重载-覆盖-向上转型的问题)
- swift继承自Objective-C基类时重载方法报错的问题
- 虚函数,重载,继承叠加产生的问题
- 对象继承时重载方法的覆盖问题
- python继承中重载问题:私有函数不能被子类重写
- C++中继承技术引发的问题:重载(overload),覆盖(override)和隐藏(hide)的区别
- 浅谈Python中重载isinstance继承关系的问题
- C++ 多重继承 函数重载 未搞清楚问题
- 关于继承与构造函数重载的问题(初始化子类构造函数中的父类对象)求解答。。。
- JAVA基础知识点(六)--接口,多态,继承,抽象类,重载的问题
- 继承层次中的函数重载问题
- python继承中重载问题:私有函数不能被子类重写
- 简单的java实验,涉及到 类继承以及接口问题,方法体的重写(区别于重载)
- C++中继承技术引发的问题:重载(overload),覆盖(override)和隐藏(hide)的区别
- 处理菱形继承问题&&实现一个虚函数的覆盖及调用&&实现以下几个类的成员函数
- Codeigniter 控制器的继承问题
- C/C++一些知识4(重载与多态、虚继承)
- JAVA知识点总结(四)继承,多态,重载与重写
- 关于类的虚函数的public,private的继承问题。
- 问题:1.sizeof;2.重载覆盖隐藏;3.内存管理