#include <iostream>
using namespace std;
class T{};
class B{
public:
void f(){
cout << "B::f()\n";
}
void f(int i){
cout << "B::f(" << i << ")\n";
}
void f(double d){
cout << "B::f(" << d << ")\n";
}
void f(T){
cout << "B::f(T)\n";
}
};
class D1:public B{
public:
void f(int i){
cout << "D1::f(" << i << ")\n";
}
};
int main(){
D1 d;
d.f(10);
d.f(4.9); //编译警告,会执行自动类型转换
//d.f(); //被屏蔽,编译错误
//d.f(T()); //被屏蔽,编译错误
return 0;
}
会发现:浮点数4.9自动转换成了整型数4 。这就是函数重写的作用。
#include <iostream>
using namespace std;
class T{};
class B{
public:
void f(){
cout << "B::f()\n";
}
void f(int i){
cout << "B::f(" << i << ")\n";
}
void f(double d){
cout << "B::f(" << d << ")\n";
}
void f(T){
cout << "B::f(T)\n";
}
};
class D1:public B{
public:
using B::f;
void f(int i){
cout << "D1::f(" << i << ")\n";
}
};
int main(){
D1 d;
d.f(10);
d.f(4.9); //编译警告,会执行自动类型转换
d.f(); //被屏蔽,编译错误
d.f(T()); //被屏蔽,编译错误
return 0;
}
会发现:加上using 基类名::函数名; 语句后就恢复了基类同名函数在派生类继承中的权限。