52,C++(06)

/*
達內學習 C++ day50 2013-11-12
*/
一,成員指針
  a,成員變量指針 指向類的成員變量的指針
      成員變量的類型  類::*ptr;
     ptr = &類::成員變量
      類型 對象;
      對象.*ptr; 對象指針->*ptr;;
      成員變量指針的本質  指針在對象內的偏移量
  b,成員函數指針
     void  show(int a);
     void (類名::*pshow)(int a);
     去掉變量名就是類型,類型是分開的則,變量名用括號
    pshow = &類名::函數名;
      類名 對象名;
      (對象名.*pshow)();
二,this  指針
    成員函數中  誰調用 this指針指向誰
三,運算符重載
   1,什麼是運算符重載
    函數的特殊表現形式
   2,二元運算符重載
    L#R
   a,去L對象對應的類型中找一個函數
    operator#(R類類型)
   b,沒有成員函數  則去全局找
     operator#(L類類型,R類類型);
   3, 輸入輸出運算符
     (不一定往屏幕上輸出)
    流對象  不能拷貝  也不能加const修改
    cout<<R;
    a,去流對象中找一個成員函數
    ostream& operator<<(R對象類型);
    b,全局找
     ostream& operator<<(ostream& os,const R對象類型)
      friend ostream& operator<<(ostream& os,R對象類型)
   4,一元操作符
     #R
    a,去R類型中着一個成員函數
     operator#()
    b,獲取去全局找
     operator#(R)
四,運算符重載的限制
  1,不是所有的運算符都能重載
   ::  作用域運算符
   .   取成員
   .*   成員指針運算符
   ?:三目運算符
   sizeof 類型大小
   typeid  類型信息運算符
  2,不能對基本類型的數據進行重載
   運算符重載中 至少有一個類型是類類型
  3,不能改變運算符規則
  4,不能發明新的運算符
  5,只能是成員的運算符
   = [] () -> *
  賦值運算符是編譯器唯一提供的運算符,默認是把一個對象中的內容逐字節拷貝,默認是淺拷貝
  a,構造函數中分配堆內存
  b,析構函數中釋放內存
  c,拷貝構造函數 防止淺拷貝

  ()運算符,
    ()函數對象,把一個對象像函數一樣使用,簡稱爲函數對象
        類型  operator()(參數列表);
    () 處理類型轉換
     operator  轉換成的類型();

  -> *
   把一個不是指針的類型當作指針使用
  
  new delete  運算符重載
  void* operator new(size_t size);
  void operator delete(void* ptr);
  
如果一個類中有一個單參的構造函數,則系統允許把一個單參的類型變量轉換成
  Integer(int data =0):data(data){}
  Integer i = 10;
   如果不希望可以轉換在 構造函數前加 explicit
//====================================================
面向對象的特徵:
抽象,封裝,繼承,多態,
1,封裝
  不該讓調用者知道就私有化  讓調用者知道的公開化
  目的:隱藏細節
  類 這個類只能得到一個實例
   (單例模式)
  A& a=A::getInstance();
  私有構造  私有構造函數
  提供一個公開接口
 static A&  getInstance();
好處:
1,便於協同開發
2,防止不必要的擴展

 

發佈了72 篇原創文章 · 獲贊 6 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章