c++中的隱藏及過載、重寫與隱藏的區別

知其然,知其所以然。發表於2016-12-05

c/c++中的隱藏  舉個栗子

class A

{

         public : void fun1(int a, int b)

         {

                   cout<<"abcd"<<endl;

         }

};

class B : public A

{

         public : void fun1(int a)

         {

                   cout<<"abcdefg"<<endl;

         }

};

 

int main ()

{

         B b;

         b.fun1(3,4);  //會出錯,因為子類與父類之間發生了同名函式隱藏,隱藏了父類的函式

         return 0;

}

 

 

過載:首先它是發生在同一個類中,函式名字相同,返回值、函式引數可以不同

重寫:在基類和派生類中,函式形式完全一樣,函式名、返回值、引數都相同,加上virtual後是實現多型的一個條件。

隱藏:基類和派生類之間,只是函式名相同,如果用派生類的物件呼叫基類的重名函式(只是重名,函式引數可以不同,子類沒有這個函式但是父類有的,子類物件想呼叫父類的那個函式),將會發生錯誤,編譯不通過,原因是發生了函式隱藏,子類的函式隱藏了父類函式。如果想呼叫 需要使用::   例如  b1.A::fun1(1,2,3);

相關文章