類中的訪問 CONST 靜態 和指標

2021-06-18 17:11:13 字數 2365 閱讀 3696

類中的訪問

1、private資料:本類的成員函式

類外:物件.私有資料成員(錯)

類外訪問:inline doube cbox::getlength() 這樣就可以在外部使用私有資料成員:物件.getlength();

友元函式:double boxsu***ce(cbox abox)友元函式可以訪問該類的所有成員,其為全域性函式。呼叫:boxsu***ce(box)

2、private函式:同類的其他函式成員

注:只有類成員函式,才能用this指標呼叫

類中的const:

1:被宣告為const的物件其this指標也是const,因此編譯器不允許呼叫任何沒有將傳遞給它的this指標指定為const的成員函式

被宣告為const的物件可以呼叫的成員函式也都必須宣告為const

(自己:非const物件呼叫函式則比較隨意,const函式非const函式都可以)

2:僅當某個函式是類成員時,將其宣告為const才有意義,其最用是使該函式中的this指標成為const,這意味著不能在該函式的定義內在賦值語句左邊寫上類的資料成員

const成員函式不能呼叫同類的非const成員函式,因為那樣也可能修改當前物件

(總是應該將所有不修改當前類物件的成員函式宣告為const)

類中的靜態:

1、

靜態資料成員(程式啟動時自動建立並初始化為0)

通過類本身或類物件引用靜態資料成員沒有影響。

cbox::objectcount和boxes[2].objectcount 2、

cbox::afunction(10)通過類名呼叫,該函式內只能使用靜態資料成員,不能使用物件的成員

abox.afunction(10)通過具體物件呼叫,可以使用物件的成員

類中的指標和引用

1、指標

cbox * pbox=nullptr

pbox=&cigar

cout注:涉及到物件陣列:

cbox boxes[5];

cbox *pb=boxes;

cout<<(pb+2)->volume(); 2、

引用:

cbox & rcigar=cigar;

cout<

類物件的複製建構函式:

1非動態地為類成員分配空間時:

類物件的複製建構函式若寫成:cbox(cbox initb)

這時若是呼叫cbox mybox=cigar其實編譯器是執行 cbox(cigar)但是由於這樣是值傳遞,所以存在複製的過程,複製的過程

又涉及到複製建構函式的執行,所以會陷入複製建構函式的反覆執行中出不來

所以要將類物件的複製建構函式寫成:cbox(const  cbox& initb),(函式體為:m_length=initb.m_length這種)這樣傳遞引用的過程不存在複製過程,因此不會反覆

呼叫複製建構函式

注:const的乙個重要用途在此也有所體現:我們總是應該將函式的引用形參宣告為const,除非該函式將修改實參

2,動態地為類成員分配空間時:(cmessage類中有乙個資料成員char *pmessage)

再使用預設的複製建構函式就不再合適,因為預設建構函式的作用是將類物件的指標成員儲存的位址複製到新的類物件中,在任何

乙個物件中對字串進行修改,也會修改另乙個物件

所以要提供乙個類複製建構函式來代替預設版本:

cmessage(const cmessage &amess)  {

size_t len=strlen(amess.pmessage+1);

pmessage=new char[len];

strcpy_s(pmessage,len,amess.pmessage);

注:如果動態的為本地c++類的成員分配空間,則必須實現複製建構函式,因為即使沒有用乙個類物件初始化同類的物件,若是沒有自己實現複製建構函式的話,也會出錯,比如下面這種情況:

cmessage amess1("i love you");

displaymessage(amess1);

其中displaymessage函式的定義如下:

void displaymessage (cmessage amess2)    {  cout《因為預設建構函式建立amess1的副本amess2的時候,amess2的指標指向amess1所指向的字串,displaymessage函式結果時,呼叫析構函式,釋放amess2指標指向的

記憶體,刪除amess2,從displaymessage返回時,amess1包含的指標仍然指向剛被釋放的那塊記憶體區域,它被再次使用或最後被刪除時,程式將表現出異常行為。

指向const的指標和const指標

指向const的指標 int gorp 16 int chips 12 const int p snack gorp 其中p snack指向乙個const int。p snack 20 不被允許,p snack的值為const,禁止修改p snack指向的值,p snack chips 可以執行,p...

C C 中的const和const指標的基本用法

c c 中使用const關鍵字來修飾常量,所有常型別的變數的值都是不可更改的,並且在定義的時候就必須被初始化 const int a 錯誤,必須初始化 const int a 100 a 200 錯誤,不能更改常量的值 const int a 100和int const a 100這兩種寫法是一樣的...

const指標和指向const物件的指標

1.有關const指標和指向const物件指標的一道題 首先要說明的是怎麼來判斷const指標還是指向const的指標 如果const後面跟的是型別,那麼const是用來修飾物件的,所以它是指向const物件的指標 但是如果const後面跟的是指標本身,那麼const是用來修飾指標的,所以它是con...