通过派生类对象调用基类函数

时间:2015-06-04 18:46:44

标签: c++ inheritance

为什么编译器不会通过派生类对象调用基类函数(参数化为一)?派生类从基类继承函数,对吧?

#include<iostream>
using namespace std;

class Base
{
public:
    int fun()  { cout << "Base::fun() called"; }
    int fun(int i)  { cout << "Base::fun(int i) called"; }
};

class Derived: public Base
{
public:
    int fun() {  cout << "Derived::fun() called"; }
};

int main()
{
    Derived d;
    d.fun(5);
    return 0;
}

但是,当我使用示波器分辨率运算符时,我得到了所需的输出。任何人都能为我提供合理的解释吗?我还可以通过派生类对象调用基类函数(参数化一个)吗?谢谢!

int main() 
{
    Derived d;
    d.Base::fun(5);
    return 0;
}

1 个答案:

答案 0 :(得分:3)

派生函数Derived::fun() 隐藏基类中具有相同名称的所有成员。因此,您只能通过范围解析来使用基类成员。为了避免隐藏,你可以这样做:

class Derived: public Base
{
public:
    int fun() {  cout << "Derived::fun() called"; }
    using Base::fun;
};