函數在class裡面定義(侯老師的說法)
好處:快,好
注意:如果函數過于複雜,即使加了inline,編譯器也無法把它識别為inline函數
一般情況,資料和一些内部使用的函數都被定義為private,而想讓外界調用的函數則被定義為public
由上述結果可以,想要通路私有變量,隻能通過調用公有的方法來實作
單例模式:指一個類隻允許有一個執行個體
設計的思路就是把類的構造函數聲明為private,然後提供一個公共的接口使外部能夠通路到類的執行個體,如上圖
class中的函數分為兩種:
會改變資料 内容
不會改變資料内容(在函數後面加上const)
注意:右下角圖檔,當在class前面加const時,如果類中的函數後面沒有const會出錯
傳引用(四個位元組)就相當于傳指針那麼快,在參數傳遞的過程中盡可能都是傳引用;
傳引用的時候如果不希望被改變,可以加上const使不可改變;
當某一些變量位元組很小的時候可以考慮傳value;
傳回值的傳遞也盡量傳引用
友元函數可以直接拿private中的資料,友元函數相當于打開了封裝的大門
<code>如果兩個複數類型的相加是在**臨時變量**中進行的,執行完會被銷毀</code>,<code>這種情況不能使用傳引用的操作;</code>
而上圖中的加法操作是在第一個參數的位址空間中進行的,可以使用傳參數(<code>注意是這種情況可以傳引用</code>)
注意:
這裡是類外成員函數,需要在函數前面加上類名complex
成員函數分為類内和類外,并且需要注意一下和inline函數的差別
這裡就是前面提到的不能傳引用的情況,這裡的兩數相加會建立臨時對象,離開這個函數就會死亡,是以不能把reference傳出去,一傳出去,當臨時對象死亡時,外界就無法用到這個引用了,是以圖檔的中藍色部分一定要return by value。
臨時對象:**typename()**就是上面的三個return的後面部分
右圖中的黃色部分執行到下一行就會不見了,銷毀
上面的“+”這塊應該采用return by reference更好
注:傳參或者傳傳回值采用reference速度更快
上圖中“<<”這種特殊的操作符隻能寫成非成員函數(也就是全局的這種寫法)這種形式