父類為形參,子類為實參時的注意事項

2021-10-24 03:35:02 字數 1266 閱讀 4837

#include using namespace std;  

class fish  

};  

class carp : public fish  

};  

void showinf(fish fish)  // 直接進行普通的值傳遞

int main()  

當函式引數是父類物件且傳入的引數是子類物件,然而我們用的是普通值傳遞時,子類物件僅僅將自己繼承的那部分資料複製給子類形參。

#include using namespace std;  

class fish  

};  

class carp : public fish  

};  

void showinf(fish& fish)  // 進行引用值傳遞

當用&引用的方式進行值傳遞時,就相當將自己閹割成父類物件的樣子,即將只屬於自己的那一部分割去。然後將剩下的這一部分當作實參傳遞給函式。

我們這裡要注意的是虛函式,當父類中有與子類同名的虛函式時,此時子類的成員函式會覆蓋父類中的虛成員函式。因此,閹割剩下的部分並不與原父類成員相同。虛函式的作用原理詳見「虛函式表」。

我們看到父類中的showinf()函式被宣告為virtual型別的了,那虛函式是如何作用的呢?

我個人理解:虛函式的虛字可以理解為「形同虛設」,當我們宣告父類的showinf()函式為虛函式同時我們在子類中也宣告乙個showinf()函式,那麼在子類中,showinf()函式正好可以覆蓋父類中的同名函式(形同虛設的函式)。

詳細講解請參考:

#include using namespace std;  

class fish  

};  

class carp : public fish  

};  

void showinf(fish* fish)  

int main()  

深複製其實傳遞與操作的是物件的指標,因為當我們獲得位址(指標內容)後,我們可以調整指標型別用來訪問不同的有效區間,有效區間僅僅指的是記憶體中與指標型別相同的區域,並不會像值傳遞的方式閹割了一部分內容,用指標作為形參既靈活(可以調整指標型別從而調整指標指向內容)又高效(傳遞指標比值傳遞快得多)。

形參是父類的List,實參是子類的問題

需要對多個子類的集合進行同一種操作.本來可以寫多個方法就可以進行相應的多個方法的實現.現在想寫個簡單實用的方法,進行書寫.直接寫子父類的繼承,引數是父類,實參是子類是完全可以簡單實現的.但是現在的形參是父類的集合,實參是子類的集合,所以,在進行測試的時候,就多去想了想.所以用下面的來實現,感覺好多了...

函式呼叫引數為指標時,實參跟形參的問題

include void change int p int main 執行結果 0x7fffdb8192a4 0x7fffdb8192a4 0x7fffdb81928c 5 0x7fffdb8192a4 可以看出,實參跟形參是兩個不同的指標,只不過進入函式時,實參跟形參都指向main函式中的val位...

C語言自定義函式的形參為陣列時需要注意傳入長度

1 include 2 include 3 4 程式執行結果 5false sort 6length 174 8right sort 9length 5 104 5 7 8 9 11 12 13個人總結 14c c 傳遞陣列,15雖然傳遞的是首位址位址,16但是引數到了函式內,就成了普通指標,17不...