派生类函数名 原来会遮挡 基类函数名(可以用using 解决)

#include <iostream>
using namespace std;

class base {
private:
    int x;
public:
    virtual void mf1() = 0;
    virtual void mf1(int) {};
    virtual void mf2() {};
    void mf3() {};
    void mf3(double) {};
};

class Derived:public base
{
public:
    using base::mf1; //让baseclass内名为mf1和mf3的所有东西可见
    using base::mf3;
    virtual void mf1() {};
    void mf3() {};
    void mf4() {};
private:

};



int main()
{
    Derived d;
    int x = 0;
    d.mf1();
    d.mf1(x);//报错  因为 derived::mf1 遮掩了  base::mf1
    d.mf2();
    d.mf3();
    //d.mf3(x); //报错 同上

    cin.get();
    return 0;
}
//可能原因:c++独特对多继承的支持,导致多个基类可能存在同名函数,继而默认在派生类中隐藏基类的非虚函数

 

posted @ 2020-04-13 22:21  jieche  阅读(161)  评论(0编辑  收藏  举报