54,C++(08)

/*
達內學習 C++ day52 2013-11-14
*/
回憶:
繼承
1,繼承的目的
  a,代碼複用  傳承父類所有的數據(屬性和函數)
  b,擴展  一個子類具備父類所有的功能和特性
      把一個子類對象 當做父類對象來看
2,組合 和 繼承的關係
3,繼承的語法
   class B:繼承方式 A{};
4,繼承的方式
  公開  保護   私有
5,如果是私有繼承 如何對父類的數據進行訪問
  public 接口  或者  友元
6,不能被子類繼承的
 構造函數  析構函數  拷貝構造 賦值運算符
7,子類對父類構造函數  和 析構函數的調用
  子類會默認調用父類的無參構造 和 析構函數
  也可以指定調用父類的構造函數(初始化參數列表)
8,子類如何調用父類的拷貝構造函數和賦值運算符
   子類會默認調用父類的拷貝構造函數 和 賦值運算符
  一旦自定義了拷貝構造 和 賦值運算符 則必須顯示的調用父類拷貝構造和賦值運算符。
9,名字隱藏
  當子類繼承了父類的數據,如果子類中定義了和父類重名的數據,則子類的數據會覆蓋掉父類的。
  如何使用父類的數據   父類名::
10,多重繼承的語法
 class C:public A,public B{};
11,多重繼承引入的問題的解決
  a,命名衝突的解決
 使用父類名::
    名字隱藏機制 
  b,子類重複繼承父類的同名數據
   可以採用虛繼承-----解決菱形繼承(多個類有共同父類和共同子類)
// -----------------------------------
多態
  1,多態的概念 和 分析
   一個父類對象的指針或者引用 執行或者引用子類對象時,調用父類型中定義的虛函數時,函數的表現會是相應的子類的實現。
   繼承是構成多態的基礎,父類的指針和引用指向子類對象是前置條件,虛函數是構成多態的關鍵。
  2,多態舉例
  3,虛函數在子類中覆蓋父類的實現時,必須遵守函數重寫的規則(overwrite)
    函數名,參數列表,返回值都必須相同 訪問權限沒有限制
  4,多態的應用
  爲了寫出通用性代碼
  函數的參數  函數的返回值
  5,多態的本質
  虛函數表
  對象的首地址 指向一個 存有虛擬函數地址的 虛擬函數表
  6,運行時識別
    a. typeid(類型)
       typeid(對象)
      typeinfo
      name  取得類型名字
         ==  判斷兩個typeinfo 是否相等 判斷類型是否一致
         !=  判斷兩個typeinfo 是否不等
     #include<typeinf>
    b,dynamic_cast<類型>(對象)
       static_cast<類型>(對象)
      靜態類型轉換  轉換之後無法判斷是否轉換成功,動態類型轉換 可以判斷是否類型轉換成功,指針爲空,代表轉換失敗。指針不爲空 代表轉換成功。
 7,抽象類
  具備純虛函數的類叫抽象類
  virtual void foo()=0;
   抽象類不能實例化
   抽象類除了不能實例化之外 和一個普通的類沒有任何失敗。
   如果一個類中除了構造函數 析構函數 外所有的函數都是純虛函數 這種類叫純抽象類。
 如果子類繼承了抽象類,不去實現純虛函數則子類成爲抽象類。
 8,如果一個父類指針指向一個子類對象 則 delete 父類對象指針 會調用父類對象的析構函數 ,子類析構的行爲是不確定的
   父類對象的指針 = new 子類型();
   把父類的析構函數作成虛析構函數
  當父類中有虛函數時,則把析構函數作成虛函數

//=============================================================
C++ 中的IO
命令行進行輸入輸出
cin(istream) cout(ostream)
#include<iostream>

文件的輸入輸出
ifstream  文件讀
ofstream  文件寫
iofstream  既能讀也能寫
#include<fstream>

字符串的操作
istringstream
ostringstream
#include<sstream>

格式化IO  和 非格式化 IO
格式化:考慮類型   非格式化:字節處理,不考慮類型
get()得到一個字符  put()輸出一個字符

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