-
自己寫了代碼和博客。歡迎查看。
地址:https://blog.csdn.net/basic_wheels96/article/details/108197956
查看全部 -
當(dāng)在對(duì)象成員指針中用sizeof時(shí)只能打印出指針?biāo)嫉膬?nèi)存單元,而不是指針指向?qū)ο蟮膬?nèi)存單元。
對(duì)象成員:對(duì)象成為另一個(gè)類的數(shù)據(jù)成員。
對(duì)象成員指針:對(duì)象的指針成為另一個(gè)類的數(shù)據(jù)成員。
.對(duì)象成員指針的定義: 類名 * 指針名 是指針而不是對(duì)象
銷毀 Line 的時(shí)候,先銷毀隊(duì)中的內(nèi)存,在釋放 Line 本身的內(nèi)存
查看全部 -
Coordinate p1;//從棧中實(shí)例化一個(gè)對(duì)象
Coordinate *p2 = &p1;//讓p2指向p1,運(yùn)用了取地址的符號(hào)。就可以用p2來操作p1的數(shù)據(jù)成員和成員函數(shù)了
*******************************************************************
Coordinate *p1 = NULL;//第一個(gè)點(diǎn),指向NULL
p1 = new Coordinate;//因?yàn)镃oordinate是一個(gè)默認(rèn)的構(gòu)造函數(shù)所以可以沒有參數(shù)
Coordinate *p2 = new Coordinate();? //兩種不同的賦值方法
查看全部 -
CRTL+K+C:注釋快捷鍵
CTRL+K+U:取消注釋快捷鍵
查看全部 -
對(duì)象指針:類名 * 指針名? = new 類名
查看全部 -
什么時(shí)候用到拷貝函數(shù)?
a.一個(gè)對(duì)象以值傳遞的方式傳入函數(shù)體;
?b.一個(gè)對(duì)象以值傳遞的方式從函數(shù)返回;
c.一個(gè)對(duì)象需要通過另外一個(gè)對(duì)象進(jìn)行初始化。深拷貝即是先申請(qǐng)一段內(nèi)存,再在這段內(nèi)存里進(jìn)行復(fù)制操作把上一個(gè)對(duì)象數(shù)組的成員全部拷貝過來;
淺拷貝則直接把指針的地址復(fù)制給一個(gè)對(duì)象數(shù)組的第一個(gè)成員。
查看全部 -
淺拷貝:將值拷貝過去且與構(gòu)造函數(shù)同名 參數(shù)為(const?構(gòu)造函數(shù)名&?實(shí)例化名字) ???????{成員變量?=?實(shí)例化名字.成員變量}
查看全部 -
淺拷貝:
將對(duì)象內(nèi)容簡(jiǎn)單拷貝,指針成員指向同一地址
深拷貝:
在堆中開辟一塊新的地址,將原地址中的內(nèi)容拷貝進(jìn)去
如果數(shù)據(jù)成員里面不包含指針的話用淺拷貝即可<br>
如果數(shù)據(jù)成員里面包含指針的話,那就需要用到深拷貝,即為該指針在堆上開辟一塊內(nèi)存,并且將另外一個(gè)對(duì)象的數(shù)據(jù)全部賦給這個(gè)對(duì)象的數(shù)據(jù)成員查看全部 -
對(duì)象成員需要外層對(duì)象傳參進(jìn)行構(gòu)造時(shí)必須采用初始化列表的方式
先構(gòu)造成員->再構(gòu)造自己;
先析構(gòu)自己->再析構(gòu)成員初始化的順序: 與 初始化列表順序無關(guān);
? ? ? ? ? ? ? ? ? ? ? 與類中定義時(shí)的先后順序有關(guān);
-構(gòu)造時(shí): 從上往下
-析構(gòu)時(shí): 從下往上.
查看全部 -
Line.cpp #include"Line.h" #include<iostream> using?namespace?std; Line::Line(){cout?<<?"Line"?<<?endl;} Line::~Line(){cout?<<?"~Line"?<<?endl;} void?Line::setA(int?x,?int?y) {m_coorA.setX(x); m_coorA.setY(y); void?Line::setB(int?x,?int?y) {m_coorB.setX(x); m_coorB.setY(y);} void?Line::printInfo() {cout?<<?"("?<<?m_coorA.getX()?<<?m_coorA.getY()?<<?")"?<<?endl; cout?<<?"("?<<?m_coorB.getX()?<<?m_coorB.getY()?<<?")"?<<?endl;}
查看全部 -
當(dāng)對(duì)象(用一個(gè)類描述)作為數(shù)據(jù)成員時(shí):
先實(shí)例化對(duì)象成員,再實(shí)例化對(duì)象
銷毀時(shí)與創(chuàng)建過程相反
查看全部 -
delete?[]p; p?=?NULL;
加上[]能銷毀所有的元素,如果不加只銷毀第一個(gè)元素
其實(shí)就是調(diào)用了p中的析構(gòu)函數(shù)
查看全部 -
int?main(void){ Coordinate?coor[3]; coor[0].m_iX?=?3; coor[0].m_iY?=?5; Coordinate?*p?=?new?Coordinate[3]; p->m_iX?=?7; p[0].m_iY?=?9; p++;??????????//p=p+1,p+=1; p->m_iX?=?11; p[0].m_iY?=?13; p[1].m_iX?=?15; p++; p->m_iY?=?17; for?(int?i;?i?<?3;?i++) { cout?<<?"coor_x"?<<?coor[i].m_iX?<<?endl; cout?<<?"coor_y"?<<?coor[i].m_iY?<<?endl;} for?(int?j?=?0;?j?<?3;?j++){ cout?<<?"p_x"?<<?p->m_iX?<<?endl; cout?<<?"p_y"?<<?p->m_iY?<<?endl; p--;} p++;????????//使指針指向最初的那一段內(nèi)存 delete?[]p;//在銷毀他的時(shí)候我們希望他的每一個(gè)對(duì)象都執(zhí)行他的析構(gòu)函數(shù) ???????????//如果不加中括號(hào),銷毀的時(shí)候只銷毀第一個(gè)元素 p?=?NULL; system("pause"); return?0;}
查看全部 -
p[0]指向第一個(gè)元素;執(zhí)行p++之后p[0]指向第2個(gè)!
釋放內(nèi)存時(shí)要注意指針 p 指回原來的位置。用delete釋放數(shù)組內(nèi)存時(shí)要注意此時(shí)的指針*p要指到該數(shù)組的第一個(gè)元素上。保證申請(qǐng)和釋放的是同一段內(nèi)存
第二個(gè)循環(huán)第一次打印的是第三個(gè)元素因?yàn)橹羔樈?jīng)過p++到第三個(gè)元素了,所以得用p--
注意:在對(duì)象數(shù)組中,想要訪問某個(gè)堆中的對(duì)象的成員屬性時(shí)
p->m_ix=1;p[0].m_ix=1
效果是一樣的,但是p[0]->m_ix=1這種用法是錯(cuò)誤、以及注意 p++后 p[0] 前后的指向是不一樣的。數(shù)組的頭指針最好要保留,采用(p+1)->m_iX的方式訪問,不會(huì)更改頭指針
查看全部 -
對(duì)象數(shù)組:
棧中實(shí)例化一個(gè)對(duì)象數(shù)組:Coordinate coord[3];
堆中實(shí)例化一個(gè)對(duì)象數(shù)組 :Coordinate *p=new Coordinate[3];查看全部
舉報(bào)