#ifndef __COMPLEX__ #define __COMPLEX__ #include <iostream.h> class complex //前置申明 class complex { ...//類聲明 } complex::function()...//類定義 #endif
class complex //class head { //class body public: complex (double r = 0, double i = 0): re (r), im (i) { } complex& operator += (const complex&); double real () const { return re; } //函數在body內定義,則自動成爲inline候選人 double imag () const { return im; } private: double re, im; friend complex& __doapl (complex *, const complex&); };
構造函數是類中很是重要的函數,在類建立的時候由系統自動調用ios
complex (double r = 0, double i = 0)//默認參數,在不傳參的時候直接使用默認值 : re (r), im (i) //初始值列表,在建立成員的時候直接賦值,比在建立以後賦值效率高 { }
double real () const { return re; }
在函數名後面加const修飾符,通常狀況下加const表示這個函數不會修改內部的成員變量。能加的儘可能加上const。函數
const complex a(1,2);//因爲a是const的,而類的設計者在設計real()的時候沒有const,調用會報錯 a.real();
值傳遞會發生拷貝,當傳遞比較大的數據時,拷貝是一件很費時間和效率的事情,因此在傳值和引用之間首選傳引用,可是須要考慮有些時候是不能傳引用的,好比臨時對象佈局
自由取得friend的private成員 相同class的各個object互爲友元this
操做符重載能夠看作是特殊的函數,能夠是成員函數,也能夠是非成員函數,若是是成員函數的話,默認第一個參數是this指針,通常不寫。設計
這種狀況下就不能寫成是成員函數了,由於和其它類型的對象相加指針
這種狀況下,返回的是臨時對象,臨時對象返回值絕對是不能用引用的code
返回值在什麼狀況下,不能使用pass by reference?對象
若是函數的返回值是在函數體內部臨時建立用來存放結果值(是local的),那麼在函數結束時這個臨時對象的生命週期就結束了【雖然仍然能夠吧reference傳遞出來可是是錯誤的】。這種狀況則不能使用pass by reference。blog