目錄
#include
using std::cout;
using std::endl;
class base
; ~base(){};
virtual void fun()
};class derived : public base
; ~derived(){};
void funrmkobmf() override ;
};int main()
輸出為:
derived class
base class
重寫的注意點:
程式設計客棧
協變返回型別:在c++中,只要原來的返回型別是指向類的指標或引用,新的返回型別是指向派生類的指標或引用,覆蓋的方法就可以改變返回型別。這樣的型別稱為協變返回型別(covariant returns type).
通俗的來講,原本重寫需要保證虛函式的返回型別相同,但是如果返回的型別時指標或者是引用,在保證該指標或者引用是具有繼承關係的情況下,重寫的虛函式可以返回子類的指標或者是引用,例如:
class base
; ~base(){};
virtual void fun()
virtual base* fun2() ;
};class derived : public base
; ~derived(){};
void fun() override ;
derived* fun2() override ;
};派生類重寫了基類的fun2函式,基類返回基類指標,派生類返回派生類指標。
int test();
int test(int a);
int test(int a,double b);
int test(double a,int a);
int test(string s);
需要注意的點:
隱藏比較簡單粗暴,只要滿足在不同的作用域中,且名稱相同即可發生隱藏,例如類中成員函式隱藏全域性函式,派生類的成員函式隱藏基類成員函式。重寫是一種特殊的隱藏,重寫是動態多型的一種體現,會影響到虛表,虛指標等編譯和執行時行為。
需要注意的點:
本文標題: c++填坑的重寫,過載和隱藏的詳解
本文位址:
C 的隱藏 重寫 過載和資訊隱藏
賢哲所追求的不是享樂,而是源於痛苦的自由。面試過程中有被問到隱藏的概念。把隱藏答成類的資訊隱藏了,今天被乙個好心的面試官指出來,這裡重新學習一下。include include include using namespace std 過載 1.函式的可見範圍相同。不同cpp檔案的同名函式不構成過載。...
C 過載 隱藏和重寫
1.什麼是過載呢?過載 同乙個作用域,相同函式名,引數列表不同,與返回值是否相同沒有關係,過載又稱靜態多型 過載的作用 減輕程式設計師對函式名的記憶負擔,可讓所有功能相同的函式使用同乙個名字。引數列表不同可表現在 1 引數個數方面 例如 int add int i,int j int add int...
C 中的過載 隱藏和重寫
本博參考了 同乙個類裡面,函式名和返回值型別相同,函式的引數型別或引數的個數不同。class a 只要派生類的函式和基類的函式重名,不管引數列表是否相同,基類函式都會被隱藏。class a class b public a int main a 基類的函式有virtue關鍵字修飾 b 派生類的函式與...