我的隨行筆記10 C++ Primer Plus
1.在解構函式中使用new來分配記憶體時,必須在相應的解構函式中使用delete來釋放記憶體。使用new的類通常需要包含顯示覆制函式和執行深度複製的賦值運算子。(見下2)
2.StringBad sports("Spainshu leavea"); //StringBad 是一個類 呼叫的建構函式形式為:StringBad ( const char *s);
StringBad sailor=sports; //用一個物件初始化另一個物件,呼叫的建構函式形式為:
(1)StringBad ( const StringBad & st) { //複製建構函式
num_strings++;
len=st.len; str=new char[len+1]; std::strcpy(str,st.str); }
(2)還需要編寫執行深度複製的類過載賦值運算子:
StringBad & StringBad::operator=(const StringBAd & st) {
if (this==&st) return *this;
delete [] str; //釋放舊的字串
len=st.len; str= new char [len+1]; std::strcpy(str,st.str);
return *this; }
按值傳遞和返回物件,都呼叫複製建構函式。按引用傳遞時,將減少呼叫建構函式的時間。
3.靜態資料,在類宣告中宣告,在類方法的檔案中初始化。靜態成員static,不管建立多少個物件,但只建立一個靜態成員副本。
將成員函式宣告為靜態的,則不能透過物件呼叫靜態成員函式,也不能使用this指標。靜態成員函式宣告放在公有宣告部分,可以使用類名和作用解析運算子來呼叫它
4.如果類中包含了使用new初始化的指標成員,應當自行定義一個複製建構函式,以複製指向的資料,而不是指標,這叫深度複製。淺複製只複製指標資訊,不會深入挖掘以複製指標引用的結構。
5.如果有多個建構函式,則都必須以相同的方式使用new,無引數的建構函式有new時:
String::String()
{ len=0; str=new char[1]; str[0]='\0'; }
解構函式: String::~String() { delete [ ] str; }
6. String *first=&saying[0]; //將指標初始化為指向已有的物件
String * second=neew String(sayings[1]); //用new來初始化指標,建立一個新物件 刪除:delete second; //將呼叫動態物件*second的解構函式。
7. char *buffer = new char [512];
JustTesting *pc1,*pc2; // JustTesting是一個類
pc1=new (buffer) JustTesting;// 此句為定位new運算子
delete pc1; //不合法 需顯示呼叫解構函式才能銷燬物件: pc2->~JustTesting();
delete [] buffer; //合法
pc2=new JustTesting ("Heap", 20); //常規new運算子 ...... delete pc2; //合法 ,將自動呼叫解構函式
8.C++11中空指標:NULL、0、nullptr
9. 對於被宣告為引用和const 的類成員,在建立時應當成員初始化列表方式:(這種方法只用於建構函式)
(1)class Queue { private : ..... int items; .const int qsize; };
Queue::Queue(int qs) : qsize (qs) { item=0; front =rear=NULL; } //
或者 Queue::Queue(int qs) : qsize (qs) , item(0) ,front (NULL), rear(NULL){ }
(2) class Agency{...}
class Agent { private: Agency &belong;.....};
Agent::Agent(Agency &a): belong(a) {.......}
10. C++11允許在類定義中初始化。
class Queue
{ private: .....int item=0; ... const int qsize=Q_SIZE;
};
但使用成員初始化列表的建構函式將覆蓋相應的類內初始化。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30239065/viewspace-2716306/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 我的隨行筆記2 C++ Primer Plus筆記C++
- 我的隨行筆記11 C++ Primer Plus筆記C++
- 我的隨行筆記7 C++ Primer Plus筆記C++
- 我的隨行筆記9 C++ Primer Plus筆記C++
- 我的隨行筆記8 C++ Primer Plus筆記C++
- 我的隨行筆記6 C++ Primer Plus筆記C++
- 我的隨行筆記5 C++ Primer Plus筆記C++
- 我的隨行筆記4 C++ Primer Plus筆記C++
- 我的隨行筆記3 C++ Primer Plus 3--指標筆記C++指標
- C++ Primer Plus隨記1C++
- C++ Primer Plus 隨記(第八章)C++
- 【C++ Primer Plus】學習筆記--第10章 物件和類C++筆記物件
- C++ primer Plus學習筆記(第二章)C++筆記
- 《C++ Primer Plus》15.1 友元 學習筆記C++筆記
- C++ Primer筆記C++筆記
- C++ primer 筆記C++筆記
- 《C++ Primer Plus》16.1 string類 學習筆記C++筆記
- C++ Primer Plus第6版18個重點筆記C++筆記
- C++ Primer Plus(四)C++
- C++ Primer Plus(三)C++
- C++ Primer Plus(一)C++
- 《C++ Primer》筆記-#include,#ifndefC++筆記
- C++ Primer Plus 第四章 複合型別 學習筆記C++型別筆記
- c++ primer 第二章閱讀筆記C++筆記
- element-plus隨筆
- 《C++ Primer》學習筆記(六):C++模組設計——函式C++筆記函式
- 《C++ Primer》學習筆記(八):標準 IO 庫C++筆記
- C++ Primer 讀書筆記 - 第一章C++筆記
- 黑馬筆記--C++基礎篇--隨筆筆記C++
- 隨筆 sqlplus / as sysdbaSQL
- 《C++ Primer》讀書筆記(第一章 開始)C++筆記
- C++ Primer 5th筆記(5)chapter5 語句C++筆記APT
- C++ Primer 第二章 學習筆記及習題答案C++筆記
- 隨筆記筆記
- C++ Primer!C++的“倚天劍”C++
- 筆記:《C++ Primer 中文版(第5版)》 第1章 開始筆記C++
- 41、C++ Primer 4th筆記,IO庫,格式化IO操作C++筆記
- 15、C++ Primer 4th 筆記,類和資料抽象,友元C++筆記抽象