c++物件陣列和物件成員
物件陣列
例子:
class
coordinate
;int
main
(void
)
物件成員
初始化時先初始化成員物件,再初始化總物件,銷毀時先銷毀總物件再銷毀其中成員物件。
//使用物件成員的例子
#include
#include
#include
"line.h"
using
namespace std;
intmain
(void
)#include
"line.h"
void line::
seta
(int x,
int y)
void
setb
(int x,
int y)
void line::
printinfo()
#include
"coordinate.h"
class
line
~line()
void
seta
(int x,
int y)
;void
setb
(int x,
int y)
;void
printinfo()
;private
: coordinate m_coora;
coordinate m_coorb;};
#include
"coordinate.h"
void coordinate::
setx
(int x)
int coordinate::
getx()
void coordinate::
sety
(int y)
int coordinate::
gety()
class
coordinate
~coordinate()
void
setx
(int x)
;int
getx()
;void
sety
(int y)
;int
gety()
;private
:int m_ix;
int m_iy;
};
c++深拷貝與淺拷貝
如何實現拷貝建構函式並不簡單,物件間的拷貝大致為為兩種情況,深拷貝和淺拷貝。
深拷貝當進行物件拷貝時,不是簡單的做值的拷貝,而是將堆中記憶體的資料也進行拷貝,這種拷貝模式就叫做深拷貝。
淺拷貝只是將資料成員的值進行了簡單的拷貝。
如果遇到指標的時候,僅拷貝了位址,因此兩個指標指向了同乙個記憶體位址,我們希望的並不是這樣,我們所期望的是,指向另乙個位址空間,但是將原指標指向的位址當中的內容複製了過來。因此需要考慮使用深拷貝。
c++物件指標
c++中的new會自動的呼叫相關物件的建構函式,而在c語言中使用malloc只會分配相關記憶體並不會自動呼叫物件的建構函式。
//簡單例子
//已經定義了乙個coordinate類
coordinate *p1 =
null
;p1 =
newcoordinate()
;coordinate *p2 =
newcoordinate()
;p1-
>m_ix=10;
p1->m_iy=20;
//不同的方法,意義一樣
(*p2)
.m_ix=30;
(*p2)
.m_iy=40;
delete p1;
p1 =
null
;delete p2;
p2 =
null
;
物件成員指標
物件的指標作為另外乙個類的物件成員。
指標型別佔4個基本記憶體單元
//前提已經申明好coordinate類
#include
"coordinate.h"
class
line
;
this指標
array arr1
this 等價於&arr1
class
array
intgetlen()
void
setlen
(int len)
private
:int len;
};
const關鍵字(在c++筆記ⅰ出現過基礎部分)
常物件成員和常成員函式
class
coordinate
;
//常物件成員
class
line
;
//常物件
const line line(1
,2,3
,4);
//常物件會呼叫常成員函式
物件的常指標和常引用coordinate coor1(3
,5);
//物件的常引用
const coordinate &coor2 =coor1;
//物件的常指標
const coordinate *pcoor =
&coor1;
學習筆記 C 封裝(下)
初始化乙個有n個物件的物件陣列時呼叫n次建構函式 相應的,銷毀時呼叫n次析構函式 例項化乙個物件時,如果這個物件包含物件成員,則先例項化物件成員,在例項化這個物件 物件成員實踐 當資料成員中含有指標時,淺拷貝會使兩個物件的成員指標指向相同的記憶體位址 深拷貝不是簡單的值拷貝,而是將指標成員指向的記憶...
陣列常用例項封裝 下
1.陣列 字串 乙個元素出現的次數function getelecount obj,ele return num 2.獲取物件陣列某些項function getelecount arr,keys var keys keys.split newarrone 是否只是需要獲取某一項的值 if keys....
iOS 遊戲渠道SDK 抽象工程封裝 下
這樣做的好處,不止在於可以清晰地劃分 之間的界限,更重要的是,這樣更加便於管理和維護。試想一下,我們做抽象工程的目的是什麼?是為了遊戲可以不用頻繁重複地接入渠道sdk嘛。那麼怎麼才能達到這個目的呢?我們將 劃分成兩個部分 thirdlib用來存放渠道sdk的依賴庫檔案。為什麼我們要把目錄的職責分得這...