C++ primer Plus

C++primer Plus
1、數值類型
0、C語言編程:結構化編程,自上而下;C++:自下而上,繼承,多態
1、c++數值轉換問題。大浮點->小浮點;浮點->整型;大整型->小整形
2.、大括號的初始化稱爲列表初始化,多用於複雜的數據類型提供值列表,初始化不允許縮窄;在不同的整型之間轉換或將整型轉換爲浮點型可允許 。
3、有符號整型按級別從高到低爲long long、long、int、short、signed char;無符號整型和有符號整型的排列順序相同;char、signed char、unsigned char類型級別相同;bool型級別最低;wchart_t、char16_t、char_32_t級別與其底層級別相同
4、傳遞參數時一般由C++原型控制;當取消原型控制時,C++將char和short整型提升;將float提升爲double
5、強制類型轉換:c語言格式:(type)name;C++格式:type(name);就像是函數調用;static_cast<>比傳統輕質類型準換更合格
6、C++沒有提供自動防止超出整型限制的功能,可以通過頭文件climits來限定

2、複合類型
1、聲明數組的通用格式:typename arrayname[arraysize];
2、sizeof和strlen的區別:sizeof是C語言的一個單目運算符,求數據類型所佔空間的大小;而strlen是一個函數,用來計算字符串長度。總結:sizeof運算符指出整個數組的長度,strlen返回存儲在數組中的字符串的長度。
3、初始化時讓編譯器計算元素個數的方法:

short things[]={1,2,3,4};int num_elements=sizeof(things)/sizeof(short);
4、STL增加了模板類vector,C++11增加了模板類array
5、面向行的輸入方法:get()和getline();到達換行符時,getline將丟棄換行符;get將保留換行符。cin.getline;getline簡單,get檢查錯誤好
6、在混合輸入字符串和數字時。注意:使用沒有參數的get()  cin.get();或使用接受一個char參數的get()  (cin>>a).get()
7、string類可以聲明爲簡單變量,而不是數組;能自動處理大小;strcpy()將字符串複製到字符數組中,strcat()將字符串附加到字符數組末尾;更安全也更復雜的函數,strncat,strncpy.
8、wchar_t,char16_t,char32_t.使用前綴L,u,U表示。原始(raw)字符串中字符代表自己。可與前三者結合使用
9、結構體初始化可使用列表初始化
10、結構化數組可以用初始化數組的方式來進行初始化:花括號,逗號
11、結構中的位字段:通常用於低級編程中
12、共用體(uinion):能存儲不同的數據類型。但只能同時存儲其中的一種類型。在不同時間存儲不同的變量;匿名共用體;共用體用來節省內存
13、枚舉(enum):被用來定義符號常量
14、一定要在指針解除引用運算符(*)之前,將指針初始化爲一個確定的、適當的地址
15、C語言中,用庫函數malloc分配內存,C++中使用new。通用格式爲:1、typename *pointer_name=new typename;2、int higgens;int pt=&higgnes
16、使用delete釋放內存:int *ps=new int;delete ps;  delete和new必須配對使用,防止出現內存泄漏
17、數組創建如果使用聲明來創建,佔用了內存,在編譯時分配給數組內存稱爲靜態聯編(static binding),必須事先指定數組長度;若使用new創建,則在運行時需要才創建,還可以在運行時選擇數組的長度,稱爲動態聯編(dynamic binding)
例子:int */pos=new int[10];delete[ ] pos;type_name *pointer_name=new typename[elements_num]
對空指針delete是安全的;pointer_name指向第一個元素
18、可以把指針當做數組名使用,如pso[0];數組名和指針真正地差別是,數組名不可修改,但指針是變量可以修改,如p3=p3+1
19、指針和數組基本等價的原因在於指針算術。C++將數組名解釋爲地址
20、對數組使用sizeof得到的是數組的長度,對指針使用sizeof得到的是指針的長度,在這種情形下,C++不會將數組名解釋爲地址
21、數組名被解釋爲其第一個元素的地址,而對數組名應用地址運算符時,得到整個數組的地址。
例子:&tell是包含20個元素的short數組(short(*)[20])
可通過以下方式進行聲明和初始化,short(*pas)[20]=&tell
22、給指針賦值:應將內存地址賦給指針,可以對變量名應用&運算符,來獲得被命名的內存的地址。new運算符返回未命名的內存的地址
23、對指針解除引用:對指針解除引用意味着獲得指針指向的值。對指針應用解除引用或間接運算符(*)來解除引用
另一種解除引用的方法是使用數組表示法。pn[0]與*pn等價
24、注意區分指針和指針所指向的值:pt爲指向int的指針,則*pt爲一個int變量
25、通常情況下,C++將數組名視爲數組的第一個元素的地址;一種例外情況,當sizeof運算符用於數組名時,此時將返回整個數組的長度.
26、C++允許將指針和整數相加,加1的結果等於原來的地址值加上指向的對象佔用的總字節數。將一個指針減去另一個指針,獲得兩個指針的差,後一種運算將得到一個整數,且當兩個指針指向同一個數組時,纔有意義。 
27、數組的動態聯編和靜態聯編。靜態聯編是數組的長度在編譯時設置;使用new[]運算符創建數組時,將採用動態聯編,即在運行時分配空間。用完後要用delete釋放佔用的內存。
28、數組表示法和指針表示法:使用方括號數組表示法等同於對指針解除引用
29、因爲C++不能保證字符串字面值被唯一的地 存儲,當指針聲明爲const,編譯器將禁止改變指針指向的位置
30、在將字符串讀入程序時,應使用已經分配的內存地址,該地址可以是數組名,也可以是new 初始化的指針
31、cout打印指針將打印地址,指針類型爲char*,cout將顯示指向的字符串。要顯示指向字符串的地址, 必須將指針轉化爲另一種指針類型如(int*)ps
指針的賦值只是複製地址,使兩個指針指向相同的內存單元和字符串。
32、要獲得字符串副本,首先要分配內存來存儲字符串,通過聲明數組或使用new,然後將字符串複製到新分配的空間中,使用strcpy()函數,兩個參數()包括目標地址和字符串地址。但當目標數組比字符串數組小時,可使用strncpy函數,第3個參數是要複製的最大字符數,且最後需加上0字符
總結:必須使用strcpy()或strncpy()函數,,而不是賦值運算符來將字符串賦給數組。
33、上述是C風格的字符串,而C++String類型很簡單:不用擔心字符串越界,並可以使用賦值運算符。
34、用new創建動態結構不能將成員運算符句點用於結構名,因爲只有名稱,不知地址。可以使用箭頭成員運算符,可用於指向結構的指針。
總結:1、當結構標識名是結構名,則使用句點運算符;如果標識符是指向結構的指針,則使用箭頭運算符。
          2、另一種方法是,如果ps是指向結構的指針,則*ps就是被指向的值-結構本身。可使用(*ps).price。必須使用括號。

3、循環和關係表達式
35、C風格使用strcmp來比較字符串是否相等,C++可是使用String類的字符串直接比較。
36、C++爲類型建立別名的方式有:1)使用預處理器 #define BYTE char 2)使用關鍵字typedef來創建別名,typedef char byte(typedef typename aliasname)
37、C++11新增了一種循環:基於範圍的for循環。簡化了數組或容器類的每個元素執行相同的操作
38、循環和文本輸入:1)使用原始的cin輸入2)使用cin.get(char)輸入
注意:cin.get( )指的是不接受任何參數的版本;cin.get(char)指的是接受另一個參數的版本
39、結束輸入CTRL+Z,繼續輸入cin.clrear
40、常見的字符輸入做法:while(!cin.fail()==false)   while(!cin.fail( ) )  while(cin)  while(cin.get(ch))
41、可以使用cout.put(char)來顯示字符
42、cin.get( )  cin.get(ch)
43、二維 數組,可以使用字符串指針數組、char數組和string對象數組 
44、條件運算符爲了防止錯誤選擇value==variable
45、取值範圍測試用and來組合兩個表達式;與運算符的優先級高於或運算符
46、cctype函數,可用isalpha()檢查字符是否爲字母字符,isdigits()檢查字符是否爲數字字符,isspace()測試字符是否爲空白,ispunct()測試是否爲標點符號。使用時需要在頭文件設置爲<cctype>
4、函數
47、cctype函數,可用isalpha()檢查字符是否爲字母字符,isdigits()檢查字符是否爲數字字符,isspace()測試字符是否爲空白,ispunct()測試是否爲標點符號。使用時需要在頭文件設置爲<cctype>
48、原型描述了函數編譯器的接口,將函數返回值的類型以及參數的類型和數量告訴編譯器。即它可以確保編譯器正確處理函數返回值;檢查使用的參數數目是否正確,檢查參數類型是否正確。僅當有意義時,原型參數才導致類型轉換。編譯階段進行的原型化成爲靜態類型檢查(static type checking)
49、用於接受傳遞值的變量被稱爲形參,傳遞給函數的值成爲實參。
50、C++     將數組名視爲指針。C++將數組名解釋爲第一個元素的地址。當且僅當用於函數頭或函數原型中,int sum_arr(int* arr,int n)與int sum_arr(int arr[],int n)等價,意味着arr爲一個int指針。當指針指向數組第一個元素時,使用數組表示法;當指針指向一個獨立的值時,使用指針表示法
51、arr[i]==*(ar+i);&arr[i]==ar+i; 
52、爲了保護數組,可用const。如 void show_array(const double ar[ ],int n)
53、將const關鍵字指向指針,第一種是讓指針指向一個常量對象,防止修改所指向的值;第二種是將指針本身聲明爲常量,防止改變指針指向的位置。
54、c++禁止將const指針的地址賦給非const指針
55、如果數據類型本身不是指針,可以將const數據或非const數據的地址賦給指向const的指針,但只能將非const數據的地址賦給非const指針。
56、 const int* p; (推薦) p是一個指針,它指向的內容是const int 類型。p本身不用初始化它可以指向任何標示符,但它指向的內容是不能被改變的
int* const p=一個地址; (因爲指針本身的值是不能被修改的所以它必須被初始化), p是一個指針,這個指針是指向int 的const指針。它指向的值是可以被改變的如*p=3;
57、結構編程時時,可以按值傳遞結構(結構較小時)和按地址傳遞結構,以及按引用傳遞結構
58、按地址傳遞結構:注意首先在調用函數時,將結構地址(&)而不是結構本身傳遞;將形參聲明爲指針*;由於形參是指針不是結構,使用間接成員符(->)而不是成員運算符(.);返回也是返回一個指針
59、使用array對象與結構時,注意要顯示某個對象時,可以按值傳遞,要修改某個對象時,可以按地址傳遞,其實還可以按引用傳遞。模板array除了存儲基本數據類型,還可以存儲類對象。
如:
void show(std::array<double,4> da);void fill(std::array<double,4>*pa);
60、函數指針:使用函數名能獲取函數地址。必須區分函數名和函數地址;聲明指向函數的指針,必須指定指針指向的函數類型,即函數的返回類型以及函數的參數列表;即應該像函數原型那樣指定有關函數的信息。

double pam(int);  double (*pf) (int)
一般要聲明指向特定類型的函數指針,首先編寫函數原型,然後用(*pf)替代函數名,則pf爲指針。
61、括號很重要,優先級順序,*pf(int)意味着pf()是一個返回指針的函數,而(*pf)(int)則意味着pf是一個指向函數的指針。

double pam(int);double (*pf)(int);pf=pam;
注意,傳遞地址時使用函數名即可。使用函數指針調用被指向的函數。在使用(*pf)時,將其看作函數名即可。
C++綜合兩種學派認爲,pf與(*pf)等價
62、自動類型推斷只能用於單值初始化,不可初始化列表。
63、pa是數組第一個元素的地址,單個指針的地址,&pa是整個數組的地址。要得到第一個元素的值,只需對pa解除一次引用,對&pa解除兩次引用。

**&pa==*pa==pa[0]

64、使用函數的3個步驟是:定義函數、提供原型、調用函數
65、對類型爲基本類型的函數參數不需要使用const限定符,因爲程序傳遞基本類型時,將按值傳遞,以便函數使用副本,保護了原始數據。而const用於限定指針,防止指針指向的原始數據被破壞。
66、C風格字符串格式:char數組,雙引號的字符串,用指向字符串第一個字符指針來表示。
67、按值傳遞:傳遞結構名即可,自動保護原始數據,以時間和內存爲代價,可以使用結構成員表示法;按地址傳遞:使用地址運算符&,可節省時間和內存,但不能保護原始數據,除非對函數參數使用了const限定符,傳遞指針必須使用間接成員運算符。
68、
int judge(int (*pf)const char*))
69、inline是C++新增的特性,C語言使用預處理語句#define來定義宏-內聯代碼的原始實現。宏是通過文本替換實現的,不能按值傳遞。因此如果C語言的宏執行了類似函數的功能,應考慮將其轉爲內聯函數
70、引用是已定義的變量的別名。主要用途是可以用作函數的形參,函數將使用原始數據,不需要使用副本。
71、創建引用變量:指向int變量的引用
int rats;
int & rodents=rats;
72、引用在聲明時,必須將其初始化,而指針可以先聲明再賦值

int & rodents=rats;
int* const rodents=&ratsl
73、按引用調用,允許被調用函數使用調用程序中的變量。

void swaper(int &a,int &b);按引用傳遞。
void swaper(int *a,int* b);按指針傳遞。
void swaper(int a,int b);按值傳遞
指針版本需要函數在使用形參時使用*解除引用運算符 。
結構體可通過傳遞地址進行。定義引用變量要將其初始化,函數使用實參初始化形參。
74、當使用基本類型參數時,應採用按值傳遞;當數據比較大時,可採用引用參數。
75、按值傳遞傳參類型較多,按地址傳遞,按引用傳遞,限制嚴格。如果實參與引用參數不匹配,C++將產生臨時變量,僅當參數爲const引用時。
a)實參類型正確,但不是左值。b)實參類型不正確,但可以轉換爲正確的類型
左值是可被引用的數據對象,例如變量、數組元素、結構成員、引用和解除的指針;非左值包括字面常量和包含多項表達式
76、如果接受引用參數的函數的意圖是修改作爲參數傳遞的變量,則創建臨時變量將組織這種意圖的實現。解決辦法就是禁止創建臨時變量。
77、對於形參爲const引用的函數,如實參不匹配,則類似於按值傳遞,即使用臨時變量
78、將引用參數聲明爲常量數據的引用:
a)使用const可避免無意中修改數據的編程錯誤
b)使用const使函數能處理const和非const實參,
c)使用const引用使函數正確生成並使用臨時變量。
79、C++11新增了一種引用:右值引用&&。現在的引用爲左值引用
80、函數返回時避免返回函數終止時不再存在的內存單元引用。解決方法:返回一個作爲參數傳遞給函數的引用;使用一個new來分配新的存儲空間
81、將const作爲引用返回類型,可以使用引用返回值,不允許賦值之類的。Primer plus Page268
82、當使用傳遞的值不做修改的函數,如果數據對象很小,按值傳遞;對象是數組,只能使用指針,且需要聲明const指針;如對象結構較大,使用const指針或引用;如果數據對象是類對象,使用const引用,按引用傳遞。
83、對於修改函數中數據函數:若數據對象是內置數據類型,則使用指針;若對象是數組,只能使用指針;若對象是結構,則使用引用或指針;若對象是類對象,則使用引用。
84、設置默認參數:將值賦給原型中的參數;同時,對於帶參列表的函數,必須從右向左添加默認值,當實參從左到右賦給相應形參時,不能跳過任何參數。通過設置默認參數:可以減少要定義的析構函數、方法以及方法重載的數量。
85、函數的多態就意味着函數重載。函數的參數列表(函數特徵標)使得函數可以進行重載。編譯器將類型引用和類型本身視爲同一個特徵標。
86、重載引用參數調用最匹配的版本
87、僅當函數基本執行相同任務,但使用不同形式數據,才使用函數重載。
88、函數模板:使用泛型定義函數
template<typename AnyType>
void Swap<AnyType &a,AnyType &b)
{
     AnyType temp;
     temp=a;
     a=b;
     b=temp;
}
注意:如果將同一個算法用於不同類型的函數,可以使用模板。若不考慮向後兼容的問題,並願意鍵入較長的單詞,則使用typename而不是class.
89、重載模板:被重載的模板的函數特徵標必須不同
90、顯示具體化優先於常規模板,而非模板優先於具體化和常規模板。

void Swap(job &a,job &b);

template<typename T>
void Swap(T &,T &);

template<> void Swap<job>(job &,job &);

91、函數的顯示具體化

template <> void Swap<int>(int &,int &);
template <> void Swap(int &,int &);
函數的顯示實例化:

template void Swap<int>(int,int);
顯示實例化和具體化的區別:顯示具體化聲明再關鍵字template後包含<>,而顯示實例化沒有。兩者只能選一種。可以通過前綴template<>和template來區分顯示實例化和顯示具體化
92、對於函數重載、函數模板、函數模板重載。通過函數重載解析來選擇。1、創建候選函數列表2、使用候選函數列表創建可行函數列表3、確定是否有最佳的可行函數。從最佳到最差的順序爲:完全匹配、提升轉換、標準轉換、用戶定義的轉換
93、整數類型不能被隱式地轉換(即沒有顯式強制類型轉換)爲指針類型
94、指向非const數據的指針和引用優先於非const指針和引用參數匹配;非模板函數(包括顯式具體化)優先於模板函數;兩個模板函數,較具體的模板函數更優先。即顯式具體化將優於模板隱式生成的具體化
95、decltype進行類型推導, 主要是爲泛型編程而設計,以解決泛型編程中,由於有些類型由模板參數決定,而難以(甚至不可能)表示之的問題。;還有後置類型。auto h(int x,float y)->double
96、只有一行代碼的小型,非遞歸函數適合定義爲內聯函數
97、函數默認值必須從右向左提供,因此不能隨便賦予默認值
98、注意:函數具體化必須現有函數模板
99、 由於C++標準庫中的I/O類對<<操作符重載,因此在遇到字符型指針的時候會將其作爲字符串名進行處理,輸出指針所指的字符串。既然如此,我們就別讓它知道那是字符串指針,所以,需要用到強制類型轉換,把字符串指針轉換成無類型的指針。
只要別讓編譯器認爲那是一個指向字符串的指針,那麼就可以輸出地址,而不是字符串的內容
     cout<<(void *)c<<endl;
5、內存模型和名稱空間
100、頭文件包括:函數原型、使用#define和const定義的符號常量、結構聲明、類聲明、模板聲明、內聯函數
101、#ifndef可以避免多次包含同一個頭文件
102、C++使用三種不同的方案來存儲數據:自動存儲持續性(在函數定義中聲明的變量)、靜態存儲持續性(static)、線程存儲持續性(thread_local)、動態存儲持續性(new,但需要delete將其釋放,有時被稱爲自由存儲(free store)或堆(heap))。
103、作用域描述了名稱在文件(翻譯單元中)的多大範圍可見。鏈接性(linkage)描述了名稱在不同單元間共享,鏈接性爲外部可在文件間共享,爲內部則只能由一個文件函數共享。自動變量無鏈接性,不可共享。
104、自動變量只在包含它們的函數或代碼塊中可見,auto關鍵字用於默認自動的變量,即爲局部自動變量。
105、棧“後進先出”,register寄存器變量,顯式地指出變量是自動的
106、靜態變量:鏈接性爲外部的靜態持續變量,必須在代碼塊的外面進行聲明;鏈接性爲內部的靜態持續變量,必須在代碼塊外部聲明,並使用static限定符;創建沒有鏈接性的靜態持續變量,在代碼塊內聲明,並使用static限定符,
107、未被初始化的靜態成員變量的所有位都被設置爲0,即爲0初始化的。
108、靜態變量進行常量表達式初始化和動態初始化
109、C++變量聲明:一種是定義聲明,給變量分配存儲空間;另一種是引用聲明,不分配空間。

double up;//定義
extern int blem;//聲明
110、作用域解析符::,將其放在變量名前面時,該運算符使用全局版本
111、說明符:auto、register、static、extern、therad_local、mutuable
cv-限定符:const、volatile
使用new和new[]分別調用以下函數  分配函數
void* operator new(str::size_t);
void* operator new[](str::size_t);
void operator delete(void*);
void operator delete[](void*);
112、new負責在堆(heap)中找到一個足以能滿足要求的內存塊,還有定位new運算符:返回傳遞給它的地址,並將其強制轉換爲void *,以便能賦給任何指針類型。
int *pi=new int;
int *p2=new(buffer)int;//調用了new(sizeof(int),buffer)
int *p3=new(buffer)int [40]//調用了new(40*sizeof(int),buffer)
113、using聲明:將特定的名稱添加到所屬的聲明區域中和using編譯指令:使名稱空間的所有名稱可用,不需要使用作用域解析運算符
using Jill::fetch;
using namespace std;
6、對象和類
114、OOP特性:抽象、封裝和數據隱藏、多態、繼承、代碼的可重用性。
制定基本類型完成了三項工作:決定出具對象需要的內存數量、決定如何解釋內存中的位、決定可使用數據對象執行的操作或方法
115、類規範由兩個部分組成:類聲明和類方法定義。類聲明:以數據成員的方式描述數據部分,以成員函數(方法)的方式描述公有接口;類方法定義:描述如何實現類成員函數。
116、類設計儘可能將公有接口與實現細節分開。公有接口表示設計的抽象組件。將實現細節放在一起並將它們與抽象分開成爲封裝。數據隱藏(將數據放在類的私有部分中)是一種封裝,將實現的細節隱藏在私有部分;另一種封裝:將類函數和類聲明放在不同文件中。
117、一般來說,數據項通常放在私有部分,組成類接口的成員函數放在公有部分。不能直接調用私有函數,彈弓有函數可以使用它們。
118、結構和類的區別:結構的默認訪問對象是public,而類爲private。一般使用類實現類描述,把結構限制爲純粹的數據對象
119、定義成員函數時,使用作用域解析運算符(::)來標識函數所屬的類;類方法可以訪問類的private組件。
120、一般將內聯定義放在定義類的頭文件中,在OOP中,調用成員函數被稱爲發送消息,將同樣的消息發送給兩個不同的對象將調用同一個方法,但該方法將被用於兩個不同的對象。
121、客戶/服務器模型,即client-server model。在oop中,client是使用類的程序,類聲明(包括類方法)構成了服務器。因此client瞭解該接口,sever確保服務器根據該接口可靠並準確地 執行。sever設計人員只能修改類設計的實現細節,而不能改接口。
122、setf可以避免科學計數法,可控制格式。
std::ios_base::fmtflags orig=std::cout.setf(std::ios_base::fixed,ios_base::floafied);

cout.setf(orig,ios_base::floatfied);
123、構造函數和析構函數。構造函數沒有聲明原型類型,進行初始化。程序聲明對象時,將自動調用構造函數。構造函數要注意成員名和參數名不可相同,可以在數據成員中使用m_前綴,或在成員名中使用後綴。
類構造函數
Stock gaement=Stock("Furry Mason",50,2.5));
Stock *pstock=new Stock("Furry Mason",50,2.5);

注意:無法使用對象來調用構造函數,因爲在構造函數構造出對象之前,不存在對象。因此構造函數用於創建對象,而不能通過對象來調用。
124、定義默認構造函數的方式:1、給已有構造函數的所有參數提供默認值2、通過函數重載來定義另一個構造函數(沒有參數的構造函數)
125、析構函數沒有參數,~stoke(),當類對象過期時,析構函數將自動被調用。
126、代碼塊內執行完畢,纔會調用析構函數。
127、const 成員函數,保證函數不會修改調用對象,將const關鍵字放在函數的括號後面。只要類方法不修改調用對象,就應當將其聲明爲conts。

void show() const
128、所有的類方法將this指針設置爲調用它的對象的地址。指針可以訪問結構成員,類成員。this指針指向電泳對象,如果方法需要引用整個調用對象,則可以使用表達式*this。若在函數括號後使用const限定符將this先定位const,這樣不能用this修改對象的值。this是對象的地址,*this是對象

kate.topval(joe)
kate來調用topval(),s是joke,this指向kate,*this是kate
129、可使用構造函數來初始化數組元素,爲每個元素調用構造函數。初始化對象數組:首先使用默認構造函數創建數組元素,用花括號中的構造函數創建臨時對象,將臨時對象的內容複製到相應的元素中。
130、在類中定義的名稱的作用域爲整個類。作用域爲類的常量:第一種方式在類中聲明一個枚舉,在類中聲明的枚舉的作用域爲整個類

class Bakery
{
     private:
           enum{months=12};
          double costs[months];
}
第二種方式是使用關鍵字static,將常量與其它靜態變量存儲在一起,而不是存儲在對象中。

class Bakery
{
     private:
          static const int months=12;
          double costs[months];
}
131、作用域內枚舉,使用時需要用枚舉名來限定枚舉量

enum class egg{small,medium,large,jumbo};
enum class t_shirt{small,medium,large,xlarge};
132、類適合於描述adt,公有成員函數接口提供了ADT描述的服務,類的私有部分和類方法的代碼提供了實現,並對類的客戶隱藏
133、類定義了一種數據類型,包括如何使用它。對象是一種變量或其他數據類型(如用new生成的),並根據類成員被創建和使用。類和對象之間的關係和標準變量和其變量。
134、如果創建給定類的多個對象,則每個對象都有自己的數據內存空間;但所有的對象都使用同一組成員函數(方法是公有的,數據是私有的)。
135、在創建類對象或顯示調用構造函數時,類構造函數可被調用。當類對象過期,類析構函數將被調用。
136、默認構造函數的好處:擁有默認構造函數後,可以聲明對象,而不初始化它,即使已定義了初始化構造函數。而且還能聲明數組。默認參數在原因中
137、this是類方法可以使用的指針,指向於用於調用方法的對象,this是地址,*this是對象。
138、運算符函數格式:operator(argument-list)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章