C++编译时多态性有疑问吗?

siv*_*iva 3 c++ polymorphism

下面的程序在父类和子类中包含两个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 Bshow(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)

  • @Chris:using指令是导入命名空间的内容.不同的事. (2认同)