C++之不帶指針類的設計——Boolean

經典的類設計分類

  • 帶指針類
  • 不帶指針類

Header文件的佈局

#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)  //初始值列表,在建立成員的時候直接賦值,比在建立以後賦值效率高
 { }
  • 構造函數可重載:重載的時候注意是否有默認參數

- 構造函數能夠是private :private的時候不容許外部建立對象,這個是在singleton的時候常常用到。

常量成員函數

double real () const { return re; }

在函數名後面加const修飾符,通常狀況下加const表示這個函數不會修改內部的成員變量。能加的儘可能加上const。函數

const complex a(1,2);//因爲a是const的,而類的設計者在設計real()的時候沒有const,調用會報錯
a.real();

參數傳遞和返回值傳遞

  • 傳值
  • 傳引用

值傳遞會發生拷貝,當傳遞比較大的數據時,拷貝是一件很費時間和效率的事情,因此在傳值和引用之間首選傳引用,可是須要考慮有些時候是不能傳引用的,好比臨時對象佈局

friend(友元)

自由取得friend的private成員 相同class的各個object互爲友元this

操做符重載

操做符重載能夠看作是特殊的函數,能夠是成員函數,也能夠是非成員函數若是是成員函數的話,默認第一個參數是this指針,通常不寫設計


這種狀況下就不能寫成是成員函數了,由於和其它類型的對象相加指針



這種狀況下,返回的是臨時對象,臨時對象返回值絕對是不能用引用的code


重點回顧:



  • 數據Data必定放在「class body」的pirvate中

  • 參數parameters儘量使用 pass by reference 方式傳遞

  • 返回值return value 儘可能用 pass by reference 來傳遞

  • class的body主體內不作變動的參數 或 返回值 應該 const 標識符,表示不但願被修改

  • 構造函數中有一個 initialization list,要儘可能去使用。與在構造函數體內部進行參數初始化賦初值效率更高


返回值在什麼狀況下,不能使用pass by reference?對象


若是函數的返回值是在函數體內部臨時建立用來存放結果值(是local的),那麼在函數結束時這個臨時對象的生命週期就結束了【雖然仍然能夠吧reference傳遞出來可是是錯誤的】。這種狀況則不能使用pass by reference。blog

相關文章
相關標籤/搜索