创造一个子类对象,默认情况下访问父类和子类中都有的成员函数会访问到子类的成员函数。如果想要访问父类的成员函数需要加上父类作用域
#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; }