創造一個子類對象,默認情況下訪問父類和子類中都有的成員函數會訪問到子類的成員函數。如果想要訪問父類的成員函數需要加上父類作用域
#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; }
