過載函數與運算子過載學習心得

1.return *this,會寫成*this是因為this是物件的起始記憶體位置,但傳回的物件本身,所以必須加上*(取值運算子)

2.C++如果把區域物件以傳址方式傳回,會顯示警告,但仍可執行。

3..c與.cpp兩個副檔名在DEV-C++裡是不一樣的。在pspad裡則沒有差別。應該是因為在pspad是手動指定編譯程式,在dev-C++是依副檔名來判斷,所以遇到.c的檔案預設是以gcc來編譯,所以就會發生#include <iostream>找不到檔案,連帶無法編譯using namespace std,因為這是C++的語法。

4.運算子過載主要是用在物件,因為C++本身並不提供物件運算子,所以物件與物件之間並不能夠直接做四則運算,以及其他運算子的運用,而運算子過載可以解決這樣的問題。透過自行撰寫的運算子過載成員函數或全域函數,可以對物件的成員進行運算並回傳值。

5.運算子函數基本語法
類別型態 operator symbol (參數列)

6.有些運算子只能以類別的成員函數的型態存在【() [] -> =】,有些還可以全域函數的型態存在,有些則不支援過載【:: .* . ?:】。

7.如果是以全域函數型態存在的運算子函數,在相關的類別宣告裡可以再宣告成朋友函數,如此一來就可以存取private成員了。

8.有一點搞不太懂的是,什麼時候傳回的該以參考物件傳回,什麼時候正常傳回就好。表面上看,好像沒有什麼差別,因為函數實作時會直接存取成員來進行操作,例如:obj.str,所以已經和物件本身沒有直接的關係。所以在這種情況下,傳回值是不是物件本身似乎沒有什麼太大的差別。

9.承第8點,如果每一行只單純做運算子的功能,應該就如第8點所說,兩種傳回方式都可以。但如果考慮到以使用瀑布式函數呼叫方式,如:obj.setTime().printTime(),在這種情況下傳回參考物件和一般傳回方式將會導致結果不一樣,傳回參考物件可以修改物件本身,而一般傳回則無法改變物件本身,需留意。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Proudly using Dynamic Headers by Nicasio WordPress Design