C++ 讀書筆記

來源:互聯網
上載者:User
註://後的內容是我自己加的注釋。有些內容是從《C++程式設計語言》一書中引用。
第一章   概述
名字空間(namespace)是一種將程式庫名稱封裝起來的方法。可以避免和應用程式發生命名衝突。
變數定義的建構函式文法:int num_tries(0);//用來處理多值初始化例:complex<double> purei(0,7);
c++支援3種浮點數類別,float單精確度數,double雙精確度數,long double擴充精度數
template class機制,使程式員得以直到使用template class時才決定真正的資料型別。
在windows下以常量字串表示檔案路徑時,必須以“逸出序列”表示反斜線字元。
C++內建Bool類型用true/false表示真假值。
const定義的對象初始化後值不允許改變。
%取餘。
Arrays(數組),Vectors(向量)
array的大小必須是常量運算式。
array初始化元素間隔用“,”
vector object必須含入vector標頭檔,定義方法:
const int seq_size=18;
#include <vector>
vector<int> pell_seq(seq_size);
其他用法vector和array相同。
迭代(遍曆,iterate)
vector的初始化:
1、逐一初始化;
2、用已初始化的array作為vector的初值,vector<int> elem_seq(已初始化的數組,數組名+大小);
vector知道自己的大小。elm_seq.size()表示vector的大小。
vector是一種能賦值的簡單對象(The C++ Programming Language (Special Edition))。
&的多重用法。
一個未指向任何對象的指標,其內含地址為0。
指向vector<int>的指標:vector<int> *pv=0;
隨機化在標準函數庫cstdlib的函數rand()和srand()。
srand(大小);//參數是隨機數產生的種子(seed)
rand();
fstream檔案操作
ofstream,如果檔案不存在將產生一個檔案作為輸出用,如果存在則開啟之做輸出用,而檔案中已存在的資料就會丟失。
如果不想丟棄原有內容則開啟追加模式,ios_base::app
檔案有可能開啟失敗,在寫入操作前必須確定檔案開啟成功。
if(!outfile) // file定義的檔案指標

if(outfile.fail()) //c++程式設計教程,錢能,清華大學出版社
控制器在iostream上執行某些操作,如:endl會插入一個換行字元,並清除輸出緩衝區的內容
其他控制器:nex,oct,setprecision(n)//設定精度
檔案的重新置放skeeg()
第二章    面向過程的編程風格
exit()需包含入cstdlib標頭檔
信任並非良好的工程原則
在函式宣告中可以省略參數名稱,只留函數類型。
傳址(by reference)傳值(by value)
調試器應用時可加上列印語句,用以追蹤控制流程程的邏輯並顯示對象的狀態。
當我們調用一個函數時,會在記憶體中建立起一個特殊的地區,稱為“程式棧(program stack)”
引用所代表的對象不允許改變。
引用只是變數的一個別名而已。
如果在行參上加上const則函數將不能改動現參的內容。
new和delete的使用。用於堆記憶體heap memory的分配。
引用傳值無法把預設值設為0。
當第二個參數設定為指標,並設定預設值後,在調用時可以以單一參數調用。
將調試資訊輸入到檔案中,讓cout成為預設的ostream參數:ostream & os=cout
預設參數右側的所有參數必須也具有預設參數,否則屬非法。
預設值只能指定一次,可以在函式宣告處,也可在函數定義處,但不能夠在兩個地方都指定。
內聯(inline)函數,聲明為inline的函數,編譯器在每個函數調用點上將函數內容展開。一般內嵌函式的定義常常被置於標頭檔中。inline函數只是一個請求。
提供重載函數(Overloaded Functions),參數表(parameter list)不同(可能時參數類型不同,也可能是參數數目不同)的兩個或多個函數,可以擁有相同的函數名稱。但編譯器無法根據傳回值類型來區別兩個據有相同名稱的函數。
模板函數(template functions),template<typename elemtype>關鍵字typename表示elemtype在函數中乃是一個臨時放置型別的代稱,elemtype是任意的名稱。
函數的定義只能有一份,不過函數的聲明倒是可以有許多份。
inline函數的定義可以多份,為了擴充inline函數的內容。
第三章                     泛型程式設計風格
欲使用泛型演算法需含入algorithm標頭檔
Standard Template Library (STL)主要由兩種組件構成:一是容器(container)包括vector,list,set,map等類。另一種組件是用以操作這些容器類的所謂泛型演算法(ganeric algorithm)包括find(),sort(),replace(),marge()等等。
vector和list是序列容器。map和set是關聯容器。
所謂泛型演算法,提供了許多可施行於容器類及數組型別上的操作行為。他們和他們要操作的元素型別無關。
數組做行參,僅將第一個元素的地址傳入。等價於一個指向數組首地址的指標。我們可以再定義一個元素用來表示數組的終點(數組的最後一個元素的下一個地址),我們稱之為“哨兵”
泛型指標(Iterators)
每個標準容器都提供一個begin()的操作函數指向第一個元素,另一個end()的操作函數指向最後一個元素的下一個位置,他們都返回一個iterator。容器提供insert()用以安插元素,提供erase()用以刪除元素。
泛型的定義形式        itarator<vector,string>iter;
vector<string>::iterator iter=s.begin();
所有容器的共通操作
equality(==)和inequality(!=)
assignment(=)複製
empty()容器無元素時返回true
size()傳送容器當前含有的元素數目
clear()刪除所有元素
insert()安插函數
序列式容器deque
定義序列式容器物件的方式
1、產生空的容器:
list<string>slist;
vector<int>ivec;
2、產生特定大小的容器:
list<int>ilist(1024);
3、產生特定大小的容器,並為每個元素指定初值:
list<string>slist(16,"內容");
4、通過一對iterators產生容器:
int ia[8]={1,2,3,4,5,6,7,8};
vector<int>fib(ia,ia+8);
5、根據某個容器產生新的容器。
list<string>slist;
//內容
list<string>slist2(list);
提供兩個特別操作函數,允許在容器末尾進行安插和刪除操作:push_bach()和pop_back()。
另外list和deque(但不包括vector)還提供push_front()以及pop_front。
this指標在meber function內用來定址其調用者。內部運行過程是,編譯器自動將this指標加到每一個member function的參數表中。由於內部代碼轉換,tr1.copy(tr2);將變為copy(&tr1,tr2);
在member functions內,this指標可以讓我們取用其調用者的一切。
返回調用的對象只要簡單的提領指標即可。return *this;
判定兩個對象是否是相同,再次運用this!=&rhs即可
靜態類成員,static data members用來表示唯一一份可共用的members。他可以在同類型的所用對象中被存取。被聲明為 static 的資料成員是一類特 殊的共用資料成員 無論這個類的對象被定義了多少個 待用資料成員在程式中也只有一份
//意思是,所有對象將都調用同一個類成員的記憶體空間。而不是單獨的記憶體空間。
//在類中指定初值的一般方法:1、=直接賦值2、函數賦值法aa(67);3、在類的建構函式中加入:後進行上述複製。
像const static int data members,可以在聲明時為他明白指定初值。
members function只有在“不存取任何non-static members”的條件下才能夠被聲明為static,聲明方式是在聲明式之前加上關鍵詞static。
運算子多載 operator 例如: inline bool operator==(const triangular &rhs)const{return _index==rhs._index;}
運算子多載必須至少有一個參數為class類型。
引用是一種沒有 指標文法的指標//C++primer3eSC
//函數重載[]的實現。
//#include <cassert>
// using namespace std;
// int&   IntArray::operator[](int index){
//   assert(index>=0&&index<size);
//   return ia [index];}
//(c++ primer3eSC的實現)
儘管C++內建的數組支援容器的機制,但是它不支援容器抽象的語義。
在標準C++中,數組類是C++標準庫的一部分,叫做向量(vector)。
vector類提供了一對begin()/*開始處*/和end()/*結束處後1個*/
泛型演算法中參數要用起始地址加上位移量
大部分泛型演算法都包含在標頭檔algorithm中
c++提供了一套位操作符以支援位操作,以及一個位集合(bitset)容器類型,可以用來聲明含有位集合的對像。
寬字元類型wchar_t     樣式:L'a'
C++支援兩種形式的初始化
第一種形式是使用賦值操作符的顯式語 法形式 
int ival = 1024; string project = "Fantasia 2000";        
在隱式形式中 初始值被放在括弧中 
int ival( 1024 ); string project( "Fantasia 2001" );
const對象的地址只能賦值給指向const對象的指標。但是,指向const對象的指標可以被賦以一個非const對象的地址。
引用一旦被定義就不能再指向其他對象。
特別是異常類的階層,它可以用來將異常進行分組,從而使一段處理代碼能夠只在適當的細節層級上處理錯誤。
一個namespace是指一個具名的範圍(named scope)。namespace被用來將相關的聲明劃歸在一起,將不相關的代碼部分隔開。
C++規定:在一個特定的namespace內部,即使不做顯式的限定,也預設為該namespace中所包含的對象名稱是有效。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.