姓名:張立斐 ? 學號:19020700001? ?學院:電子工程學院?
轉(zhuǎn)自:https://blog.csdn.net/lvliang2017232003/article/details/86515420
【嵌牛導讀】C++學習
【嵌牛鼻子】C++
【嵌牛提問】如何學習C++暑塑?
【嵌牛正文】
1.在析構(gòu)函數(shù)中使用new來分配內(nèi)存時,必須在相應的析構(gòu)函數(shù)中使用delete來釋放內(nèi)存。使用new的類通常需要包含顯示復制函數(shù)和執(zhí)行深度復制的賦值運算符鼻吮。(見下2)
2.StringBad sports("Spainshu leavea"); //StringBad 是一個類 調(diào)用的構(gòu)造函數(shù)形式為:StringBad ( const char *s);
StringBad sailor=sports; //用一個對象初始化另一個對象柴梆,調(diào)用的構(gòu)造函數(shù)形式為:
(1)StringBad ( const StringBad & st) {? //復制構(gòu)造函數(shù)
num_strings++;
len=st.len; str=new char[len+1];? std::strcpy(str,st.str);? }
(2)還需要編寫執(zhí)行深度復制的類重載賦值運算符:
? 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;? }
按值傳遞和返回對象谋逻,都調(diào)用復制構(gòu)造函數(shù)庶灿。按引用傳遞時滴肿,將減少調(diào)用構(gòu)造函數(shù)的時間决乎。
3.靜態(tài)數(shù)據(jù)队询,在類聲明中聲明,在類方法的文件中初始化构诚。靜態(tài)成員static蚌斩,不管創(chuàng)建多少個對象,但只創(chuàng)建一個靜態(tài)成員副本范嘱。
將成員函數(shù)聲明為靜態(tài)的送膳,則不能通過對象調(diào)用靜態(tài)成員函數(shù),也不能使用this指針丑蛤。靜態(tài)成員函數(shù)聲明放在公有聲明部分叠聋,可以使用類名和作用解析運算符來調(diào)用它
4.如果類中包含了使用new初始化的指針成員,應當自行定義一個復制構(gòu)造函數(shù)盏阶,以復制指向的數(shù)據(jù)晒奕,而不是指針芦圾,這叫深度復制堵未。淺復制只復制指針信息专甩,不會深入挖掘以復制指針引用的結(jié)構(gòu)馅精。
5.如果有多個構(gòu)造函數(shù)票彪,則都必須以相同的方式使用new,無參數(shù)的構(gòu)造函數(shù)有new時:
String::String()
{? len=0;? str=new char[1];? str[0]='\0';? }
析構(gòu)函數(shù): String::~String() { delete? [ ] str; }
6. String *first=&saying[0];? //將指針初始化為指向已有的對象
? String * second=neew String(sayings[1]); //用new來初始化指針外臂,創(chuàng)建一個新對象 刪除:delete second; //將調(diào)用動態(tài)對象*second的析構(gòu)函數(shù)致盟。
7. char *buffer = new char [512];
? JustTesting *pc1,*pc2; //? JustTesting是一個類
pc1=new (buffer) JustTesting;// 此句為定位new運算符?
delete pc1; //不合法 需顯示調(diào)用析構(gòu)函數(shù)才能銷毀對象: pc2->~JustTesting();?
delete? [] buffer; //合法
pc2=new JustTesting ("Heap", 20); //常規(guī)new運算符? ...... delete pc2; //合法 臂痕,將自動調(diào)用析構(gòu)函數(shù)
8.C++11中空指針:NULL岩梳、0囊骤、nullptr
9. 對于被聲明為引用和const 的類成員晃择,在創(chuàng)建時應當成員初始化列表方式:(這種方法只用于構(gòu)造函數(shù))
(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;
};
但使用成員初始化列表的構(gòu)造函數(shù)將覆蓋相應的類內(nèi)初始化宫屠。
————————————————
版權(quán)聲明:本文為CSDN博主「lvliang2229」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議滑蚯,轉(zhuǎn)載請附上原文出處鏈接及本聲明浪蹂。
原文鏈接:https://blog.csdn.net/lvliang2017232003/article/details/86515420