您的位置:首页 > 其它

MOOC清华《面向对象程序设计》第4章:函数重写实验

2017-08-25 19:16 295 查看
#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 基类名::函数名;   语句后就恢复了基类同名函数在派生类继承中的权限。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐