53,C++(07)

/*
達內學習 C++ day51 2013-11-13
*/
回憶:
一,一元運算符  - ++ -- ~ !(默認左邊)
 #R
  R對象類型中着到一個成員函數 operator#()
  找不到的化就去全局找 operator#(R對象類型)

  L#  ++ --
 L對象類型中着到一個成員函數 operator#()
  找不到的化就去全局找 operator#(R對象類型,int)
二,運算符重載的限制
  1,不是所有的運算符都能重載
   ::  .   .*   ?:  sizeof typeid
  2,不能對基本類型運算符重載
   至少有一個是類類型
  3,不要改變運算級的特性(優先級等)
  4,不能發明新的運算符,只能對已有的運算符重載
  5,只能作爲成員的運算符 
    = []  () -> *
三,只能作爲成員運算符的舉例
 1,= []
  =要和構造函數 析構函數  拷貝構造函數一起考慮
  =實現重載時  類型& operator=()
   防止自賦值 是否自己的內存 注意返回值

  類型 operator[](int ind);
 2,小括號運算符
  1,函數對象  把一個對象像函數一樣使用
  返回值類型  operator()(參數列表);
  2,小括號做類型轉換
   operator 類型();
 3,-> * 智能指針
  地址 operator->();
  對象->函數();   對象.operator->()->函數();
  對象類型& operator*();
四,new delete
 void* operator new(size_t size);
 void operator delete(void* ptr);
五,類型轉換
 如果一個類型有一個單參的構造函數  則允許這個單參類型的變量轉換成這個類類型的變量
 class  A
{
 public:
    explicit A(B b){}
};
 把A 類型轉換 B 類型
 重載() 運算符
//===============
面向對象
1,面向對象編程的特徵
  抽象,封裝,繼承,多態
2,封裝
  該公開的公開,該私有的私有  public  private
  目的:隱藏細節
  好處:便於分工協同開發,防止不必要的擴展
  單例模式
3,繼承
  a,把一個類的數據  傳承到下一個類
     代碼複用  可以得到父類的一切
  b,擴展(字類具備父類的一切,但又擴展了父類)
   任何一個子類都可以看成是父類
  c,如何做到繼承
   一個類 繼承 另一個類
  class A{}; class B:public A{};
  d,繼承 和 組合
  f,繼承的方式
  public 繼承    公開繼承
  protected 繼承  保護繼承
  private  繼承   私有繼承
 
公開繼承:
 如果父類中的數據權限是公開的則被繼承到子類中也是公開的;如果父類中的數據權限是保護的,則被繼承到子類中權限是保護的;如果父類中的數據是私有的,則被繼承到子類中權限是隱藏的。
保護繼承 :
公有變保護  保護繼承不變 私有的隱藏
私有繼承:共有變私有,保護變私有,私有變隱藏
總結:繼承方式就是給子類的最大的權限
public 成員 在子類中變得和繼承方式一致
protected 成員 除了私有繼承爲 private 其他還爲 protected
private 成員 所有繼承方式都爲隱藏
g,如果是私有繼承  如何訪問父類數據
  如果子類中父類的數據權限是私有的,則在子類中公開一個接口。
  如果在子類中父類的數據權限是隱藏的,則在父類中開一個接口,再在子類中開一個訪問接口。
h,父類中的 構造函數 拷貝構造函數 析構函數  賦值運算符  不能繼承到子類中,但是子類中可以調用這些函數。
子類默認調用父類的無參構造函數  和 析構函數。
構建子類對象掉用父類構造函數再調用子類的析構順序相反。
父類構造->子類構造->析構子類->析構父類

如果子類中 要指定調用父類的某個構造函數需要使用初始化列表 指定調用。
i,拷貝構造函數  和 賦值運算符的調用
  子類默認調用父類的拷貝構造函數 和 賦值運算符函數。
  一旦自定義之後就需要手動調用。
 拷貝構造函數在初始化參數列表中調用
 賦值運算符要防止遞歸,需要在函數名前加 父類名::operator=(子對象);
j,繼承中的數據隱藏
  當數據繼承到子類之後  子類中如果定義了和父類數據同名的數據 則會把父類的數據隱藏掉
 如果使用被隱藏的  父類名::數據名;
4,多重繼承 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章