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

Calling a Base Class Function through Derived Class Object

本文关键字:调用 基类 类函数 对象 派生      更新时间:2023-10-16

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

#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;
}

派生函数Derived::fun() 隐藏基类中所有同名的成员。因此,您只能通过作用域解析来使用基类成员。要避免隐藏,可以这样做:

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