下面的程序在父类和子类中包含两个show()函数,但是第一个show()函数接受FLOAT参数,第二个show()函数接受INT参数.
.如果我通过传递float参数调用show(10.1234)函数,它应该调用类A的show(float a)函数,但它调用类B的show(int b).
#include<iostream>
using namespace std;
class A{
float a;
public:
void show(float a)
{
this->a = a;
cout<<"\n A's show() function called : "<<this->a<<endl;
}
};
class B : public A{
int b;
public:
void show(int b)
{
this->b = b;
cout<<"\n B's show() function called : "<<this->b<<endl;
}
};
int main()
{
float i=10.1234;
B Bobject;
Bobject.show((float) i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
B's show() function called : 10
Run Code Online (Sandbox Code Playgroud)
预期产量:
A's show() function called : 10.1234
Run Code Online (Sandbox Code Playgroud)
为什么G ++编译器选择错误的show()功能即class B的show(int b)功能?
Jam*_*lis 12
如果在派生类中有一个与基类中的函数同名的函数,它将隐藏基类中的所有函数.您需要重命名函数,或在派生类中使用using声明:
using A::show;
Run Code Online (Sandbox Code Playgroud)
或者,您可以显式调用基类函数:
Bobject.A::show(i);
Run Code Online (Sandbox Code Playgroud)