55,C++(09)

/*
達內學習 C++ day53 2013-11-15
*/
1,多態的概念和分析
 當父類對象的指針或引用指向子類對象時,調用父類型中定義的虛函數,調用的表現會是相應的子類的實現。
  繼承是多態的基礎,父類對象的指針或引用是多態的前置條件,虛函數是關鍵。
2,多態的舉例
3,函數的重寫;
  虛函數的重寫(overwrite);
  參數列表和返回值都必須相同(權限沒有限制);
  異常不能拋出更大或者更多;
4,多態的應用
  通用性編程(函數的參數函數的返回值)
5,多態的本質
 虛函數表
6,運行時識別
 a.typeid  返回一個類型信息 或者  一個對象的類型信息
 type_info -----------#include<typeinfo>
  name()類型名字  ==類型相等   !=類型不等
  識別多態類型 必須滿足多態要求
  b.dynamic_cast<類型>(對象)
    static_cast<類型>(對象)
    具備多態性的類型轉換  必須使用dynamic_cast 如果成功返回合法地址,不成功返回 NULL,引用類型轉換不成功拋出異常;
   static_cast 無論是否合法都會返回合法地址
7,抽象類
  具備純虛函數的類  叫抽象類
  抽象類不能實例化 除此之外和其他類沒有區別
 如果一個類繼承了一個抽象類沒有實現純虛函數 還是抽象類
virtual void show() = 0;
8,虛析構函數
 當一個類中有虛函數時,就把析構函數定義成虛析構函數。
  爲確保子類的析構函數會調用。
//====================================================
C++中的io
1,c++ io的分類
針對控制檯   #include<iostream>
istream   ostream
cin        cout
針對文件    #include<fstream>
ifstream   ostream   fstream
針對字符串   #include<sstream>
istringstream   ostringstream
2,非格式化io
put  get

getline() 讀取一行數據  可以指定結束符號
cin.clear() 復位  糾正流的狀態 但是不清空緩衝區
ignore(int n,char c = '\n') 最多忽略掉n個字符,到 c爲止。
putback(char c)退回一個字符
peek()   察看一個字符,不動文件指針 相當於察看後還回
3,字符串操作
 string  c++中的字符串
 把C的字符串轉換成C++ string
 string string(const char* str)
常用的運算符 == + +=  []
常用的函數  .size()   c_str()
轉換成C串 string str; const char* cstr = str.c_str();

 流輸入的數據最終會變成字符串
ostringstream  ostr;
ostr<<123;
數據來字字符串
istringstream  istr;
int data;
istr>>data;

當前時間對應日期2013-11-1514:25:38
char timestr[100];
 time_t t = time(0);
 struct tm* mytm = localtime(&t);
 sprintf(timestr,"%04d-%02d-%02d%02d:%02d:%02dtestfile",mytm->tm_year+1900,mytm->tm_mon+1,mytm->tm_mday,mytm->tm_hour,mytm->tm_min,mytm->tm_sec);

C++的字符串格式拼接
ostringstream ostr;
ostr<<123<<' '<<123.45<<' '<<"test";
把流對象變成字符串
string  cppstr = ostr.str();

4,文件的輸入輸出
ifstream(c串,模式)
ofstream(c串,模式)
fstream(c串,模式)
模式:ios::in  ios::out ios::binary ios::app
      ios::trunc(清空)  ios::ate(跳到文件尾,如果是輸出流則把文件清空)
如果流對象有文件名並創建對象成功,則同時文件打開。

read(數據地址,大小);返回值都是對象
write(數據地址,大小);
gcount() 本次讀取的數據量

以dog爲單位進行讀寫

使用read write gcount 讀取一個文件的內容,然後把讀取到的內容 每個字節都和一個固定的隨機數據^操作,然後把這個數據寫入另一個文件
//----
istream   seekg  調整讀取的位置
          tellg  得到讀取的位置
ostream   seekp  調整寫的位置
          tellp  得到寫的位置
SEEK_CUR  ios::cur  ios::beg  ios::end

隨機讀寫文件
清空文件  cat /dev/null> file
fsream
//=============
異常  exception
  系統異常
  用戶自定義異常

  c++中任何類型的數據都有表示異常
如果一個類裏沒有虛函數  則typeid不會拋出異常,當這個類中有虛函數 並且這個類的指針指向NULL,則對這個指針指向的對象進行使用 typeid 則會拋出bad_typeid

 

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