-
自己寫了代碼和博客。歡迎查看。
地址:https://blog.csdn.net/basic_wheels96/article/details/108197956
查看全部 -
當在對象成員指針中用sizeof時只能打印出指針所占的內存單元,而不是指針指向對象的內存單元。
對象成員:對象成為另一個類的數據成員。
對象成員指針:對象的指針成為另一個類的數據成員。
.對象成員指針的定義: 類名 * 指針名 是指針而不是對象
銷毀 Line 的時候,先銷毀隊中的內存,在釋放 Line 本身的內存
查看全部 -
Coordinate p1;//從棧中實例化一個對象
Coordinate *p2 = &p1;//讓p2指向p1,運用了取地址的符號。就可以用p2來操作p1的數據成員和成員函數了
*******************************************************************
Coordinate *p1 = NULL;//第一個點,指向NULL
p1 = new Coordinate;//因為Coordinate是一個默認的構造函數所以可以沒有參數
Coordinate *p2 = new Coordinate();? //兩種不同的賦值方法
查看全部 -
CRTL+K+C:注釋快捷鍵
CTRL+K+U:取消注釋快捷鍵
查看全部 -
對象指針:類名 * 指針名? = new 類名
查看全部 -
什么時候用到拷貝函數?
a.一個對象以值傳遞的方式傳入函數體;
?b.一個對象以值傳遞的方式從函數返回;
c.一個對象需要通過另外一個對象進行初始化。深拷貝即是先申請一段內存,再在這段內存里進行復制操作把上一個對象數組的成員全部拷貝過來;
淺拷貝則直接把指針的地址復制給一個對象數組的第一個成員。
查看全部 -
淺拷貝:將值拷貝過去且與構造函數同名 參數為(const?構造函數名&?實例化名字) ???????{成員變量?=?實例化名字.成員變量}
查看全部 -
淺拷貝:
將對象內容簡單拷貝,指針成員指向同一地址
深拷貝:
在堆中開辟一塊新的地址,將原地址中的內容拷貝進去
如果數據成員里面不包含指針的話用淺拷貝即可<br>
如果數據成員里面包含指針的話,那就需要用到深拷貝,即為該指針在堆上開辟一塊內存,并且將另外一個對象的數據全部賦給這個對象的數據成員查看全部 -
對象成員需要外層對象傳參進行構造時必須采用初始化列表的方式
先構造成員->再構造自己;
先析構自己->再析構成員初始化的順序: 與 初始化列表順序無關;
? ? ? ? ? ? ? ? ? ? ? 與類中定義時的先后順序有關;
-構造時: 從上往下
-析構時: 從下往上.
查看全部 -
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;}
查看全部 -
當對象(用一個類描述)作為數據成員時:
先實例化對象成員,再實例化對象
銷毀時與創建過程相反
查看全部 -
delete?[]p; p?=?NULL;
加上[]能銷毀所有的元素,如果不加只銷毀第一個元素
其實就是調用了p中的析構函數
查看全部 -
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++;????????//使指針指向最初的那一段內存 delete?[]p;//在銷毀他的時候我們希望他的每一個對象都執行他的析構函數 ???????????//如果不加中括號,銷毀的時候只銷毀第一個元素 p?=?NULL; system("pause"); return?0;}
查看全部 -
p[0]指向第一個元素;執行p++之后p[0]指向第2個!
釋放內存時要注意指針 p 指回原來的位置。用delete釋放數組內存時要注意此時的指針*p要指到該數組的第一個元素上。保證申請和釋放的是同一段內存
第二個循環第一次打印的是第三個元素因為指針經過p++到第三個元素了,所以得用p--
注意:在對象數組中,想要訪問某個堆中的對象的成員屬性時
p->m_ix=1;p[0].m_ix=1
效果是一樣的,但是p[0]->m_ix=1這種用法是錯誤、以及注意 p++后 p[0] 前后的指向是不一樣的。數組的頭指針最好要保留,采用(p+1)->m_iX的方式訪問,不會更改頭指針
查看全部 -
對象數組:
棧中實例化一個對象數組:Coordinate coord[3];
堆中實例化一個對象數組 :Coordinate *p=new Coordinate[3];查看全部
舉報