zoukankan      html  css  js  c++  java
  • C++中子类出现与父类同名成员函数如果调用父类函数

    创造一个子类对象,默认情况下访问父类和子类中都有的成员函数会访问到子类的成员函数。如果想要访问父类的成员函数需要加上父类作用域

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 1e5 + 5;
    class people
    {
    public:
        void fun(){
            printf("people 的 fun()");
        }
        void fun(int a){
            printf("people 的 fun(int a)");
        }
    };
    class student : public people
    {
    
    public:
        void fun(){
            printf("student 的 fun()");
        }
    };
    int main()
    {
        student stu;
        //使用下面这种方式来访问父类fun(int)函数会出错
        //原因:如果子类和父类中出现同名的成员函数,子类的同名函数会隐藏掉父类所有的同名成员函数
        //如果想访问父类中被隐藏的同名成员函数,需要加作用域,同样你想要访问父类中fun()函数也需要加上作用域
        //stu.fun(1);
        stu.people::fun(1);
        return 0;
    }

    如上面那个例子,子类写了函数fun(),没有写函数fun(int),但依然访问不到父类的fun(int),因为:

    如果子类和父类中出现同名的成员函数,子类的同名函数会隐藏掉父类所有的同名成员函数。如果想访问父类中被隐藏的同名成员函数,需要加作用域
     
    如果把上面函数变成静态成员函数也是一样的
    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 1e5 + 5;
    class people
    {
    public:
        static void fun(){
            printf("people 的 fun()");
        }
        static void fun(int a){
            printf("people 的 fun(int a)");
        }
    };
    class student : public people
    {
    
    public:
        static void fun(){
            printf("student 的 fun()");
        }
    };
    int main()
    {
        student stu;
        //使用下面这种方式来访问父类fun(int)函数会出错
        //原因:如果子类和父类中出现同名的成员函数,子类的同名函数会隐藏掉父类所有的同名成员函数
        //如果想访问父类中被隐藏的同名成员函数,需要加作用域,同样你想要访问父类中fun()函数也需要加上作用域
        //stu.fun(1);
        stu.people::fun(1);
        return 0;
    }
     
     
     
  • 相关阅读:
    iOS----------WKWebView修改userAgent
    Vmware路由配置
    【手机APP开发】指南
    【Git】git 指南
    【微信小程序开发】阮一峰老师的微信小程序开发入门教程——学起来~
    【vue】2-Keycode对照表
    【vue】1-vue简介与基础
    Meaning
    数据增强
    Dropout
  • 原文地址:https://www.cnblogs.com/kongbursi-2292702937/p/14724501.html
Copyright © 2011-2022 走看看