C/C++編程筆記:如何通過引用或指針傳遞參數(shù)?


在C ++中,由于以下原因,變量通過引用傳遞:
1)修改調(diào)用者函數(shù)的局部變量:引用(或指針)允許被調(diào)用函數(shù)修改調(diào)用者函數(shù)的局部變量。例如,請考慮下面的示例程序:

輸出:?
x的新值為20
2)對于傳遞大型參數(shù):如果參數(shù)較大,則通過引用(或指針)傳遞效率更高,因為僅實際傳遞地址,而不傳遞整個對象。例如,讓我們考慮以下Employee類和一個用于打印Employee詳細(xì)信息的函數(shù)printEmpDetails()。

以上代碼的問題是:每次調(diào)用printEmpDetails()時,都會構(gòu)造一個新的Employee對象,其中涉及創(chuàng)建所有數(shù)據(jù)成員的副本。因此,更好的實現(xiàn)方法是將Employee作為參考。

這一點僅對結(jié)構(gòu)和類變量有效,因為我們對于int,char等基本類型沒有任何效率優(yōu)勢。?
3)避免對象切片:?如果我們將子類的對象傳遞給需要超類對象的函數(shù),則如果按值傳遞,則對傳遞的對象進行切片。例如,考慮以下程序,它打印“ This is Pet Class”。?

輸出: This is Pet class
如果在上述程序中使用引用傳遞,則它會正確打印“This is Dog class”。請參閱以下修改的程序。

輸出:This is Dog class
這一點對于基本數(shù)據(jù)類型(例如int,char,..等)也無效。
4)在函數(shù)中實現(xiàn)運行時多態(tài)性我們可以通過將對象作為對其的引用(或指針)進行傳遞來使函數(shù)多態(tài)性。例如,在以下程序中,print()接收對基類對象的引用。如果傳遞了基類對象,則print()調(diào)用基類函數(shù)show();如果傳遞了派生類對象,則調(diào)用派生類函數(shù)show()。??

輸出:?
In base?
In derived
每天學(xué)點小知識,希望對你有幫助~
另外如果你想更好的提升你的編程能力,學(xué)好C語言C++編程!彎道超車,快人一步!筆者這里或許可以幫到你~
微信公眾號:C語言編程學(xué)習(xí)基地
分享(源碼、項目實戰(zhàn)視頻、項目筆記,基礎(chǔ)入門教程)
歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長比自己琢磨更快哦!
