我有以下代码,我不明白为什么它调用A类函数而不是B类函数。有人能告诉我为什么吗?
#include<iostream>
using namespace std;
class A{
public:
virtual void f(int n){
f(n);
cout << "A";
}
};
class B :public A{
public:
virtual void f(float f){
cout << "B";
}
};
int main(){
A*p= new B;
p->f(5.1);
}
答案 0 :(得分:1)
这些是完全不同的功能。函数由其名称及其参数标识。你没有压倒一切:你有两个不同的功能。
如果您使用override
关键字the compiler would have immediately told you this。
答案 1 :(得分:0)
我稍微修改了你的代码。我得到了理想的结果。 即:当从基类指针访问派生类引用时,我得到编译器将我的函数调用正确映射到派生类&#39;实施
我想以下事实适用:
虚拟功能和纯虚函数是一种提供/创建界面的方法,可以在软件的不同层共享,您只需共享界面,就可以隐藏用户的实现。因此,具有由两个类定义的相同函数名/接口只会引起更多混淆。
#include<iostream>
using namespace std;
class A{
public:
virtual void f(int n){ cout << "A" << endl; }
};
class B :public A{
public:
void f(int f){ cout << "B" << endl; }
void f(float f){ cout << "B" << endl; }
};
int main(){
A*p= new B;
p->f(5.1);
}
由于本论坛有很多专业人士,如果我的答案中有任何不正确之处,请填写您的意见。 感谢。