學習類中的const和static型別

2022-08-30 07:42:08 字數 4138 閱讀 3894

上**,該說的都在**及注釋裡:

1 #include 2 #include 3 #include 45

using

namespace

std;67

class

baseclass837

38//

關於「const型別的成員變數初始化的問題」

39//

下面的語句不合法!

40//

error c2758: 「baseclass::idx和baseclass::name」」: 必須在建構函式基/成員初始值設定項列表中初始化

41//

baseclass(){}

4243

//合法定義

44 inline baseclass(const

char* str): id(count++), name((char*)malloc(strlen(str)))

4550 inline ~baseclass()

5162

63//

關於「虛函式是否能是static型別的問題」

64//

下面的語句不合法!

65//

error c2216: 「virtual」不能和「static」一起使用

66//

virtual static int dosomething() = 0;

6768

//合法定義,函式體為const型別

69virtual

int get_id() const

70virtual

int get_max() const

7172

//合法定義,傳入的引數為const型別

73virtual

void set_data(const

int& d)

7475

//關於「const修飾的成員函式的問題」

76//

下面的語句不合法!

77//

error c3490: 由於正在通過常量物件訪問「data」,因此無法對其進行修改

78//

有const修飾時,類的全部成員變數變成了const型別

79//

例如:const char* name 會變成 const char* const name; int data 變成了 const int data;

80//

virtual void set_data(const int& d) const

8182

//合法定義

83virtual

void print_string() const

8687

};88

89//

下面的語句不合法!

90//

error c2720: 「baseclass::cnt」: 成員上的「static 」儲存類說明符非法

91//

static int baseclass::cnt = 0;

9293

//合法賦值表示式,必須有型別說明:int,否則不合法

94int baseclass::count = 1;95

96//

下面的語句不合法!

97//

error c2373: 「max」: 重定義;不同的型別修飾符

98//

int baseclass::max = 1024;

99100

//合法賦值表示式,必須同時有const和int

101const

int baseclass::max = 1024

;102

103class derivedclass : public

baseclass

104;

112113

//下面的語句沒有意義,相當於建立的乙個臨時變數,語句結束即銷毀

114//

derivedclass(const char* str);

115116

//合法定義

117 derivedclass(const

char*str):baseclass(str)

118;

122123 ~derivedclass()

124136

137void set_sub_name(const

char*str)

138144

145void print_string() const

146;

167};

168169

intmain()

170181 printf("

<< 測試結束!\n\n");

182 derivedclass* b = new derivedclass("

wang");

183 b->set_sub_name("

jone");

184 b->print_string();

185//

測試free能否出發析構函式

186 printf("

>> 測試free能否觸發析構函式:\n");

187free(b);

188 printf("

<< 測試結束!\n\n");

189 b =null;

190191

//測試delete能否觸發析構函式

192 derivedclass* c = new derivedclass("

zhao");

193 c->set_sub_name("

mike");

194 c->print_string();

195 printf("

>> 測試delete能否觸發析構函式:\n");

196delete c;

197 printf("

<< 測試結束!\n\n");

198 c =null;

199200

//合法,釋放堆中的空間

201int* arr1 = new

int[10

];202

free(arr1);

203204

//語法合法,但執行非法,通過free釋放棧中的空間

205//

int arr2[10] = ;

206//

free(arr2);

207208

//語法合法,但執行非法,通過free釋放常量區的空間

209//

char* arr3 = "hello !";

210//

free(arr3);

211212

getchar();

213return0;

214 }

輸出結果是:

>>建構函式順序依次是:

基類建構函式!

派生類建構函式!

《測試結束!

my id is 1 , my name is liu and my data is 0.i'm a derivedclass, my subname is (null) and i can see max = 1024.

>>析構函式順序依次是:

派生類析構函式!

基類析構函式!

《測試結束!

基類建構函式!

派生類建構函式!

my id is 2 , my name is wang and my data is 0.i'm a derivedclass, my subname is jone and i can see max = 1024.

>>測試free能否觸發析構函式:

《測試結束!

基類建構函式!

派生類建構函式!

my id is 3 , my name is zhao and my data is 0.i'm a derivedclass, my subname is mike and i can see max = 1024.

>>測試delete能否觸發析構函式:

派生類析構函式!

基類析構函式!

<< 測試結束!

C 中類的const成員函式和const物件

2.const成員函式 即普通成員函式後再加const。它可以讀取資料成員的值,但不能修改它們。若要修改 時,資料成員前必須加mutable。以指定其可被任意更改。mutable是ansic 考慮到實際程式設計時,可能一定要修改const物件中的某個資料成員而設的。const成員函式可以被相同參數列...

類中的訪問 CONST 靜態 和指標

類中的訪問 1 private資料 本類的成員函式 類外 物件.私有資料成員 錯 類外訪問 inline doube cbox getlength 這樣就可以在外部使用私有資料成員 物件.getlength 友元函式 double boxsu ce cbox abox 友元函式可以訪問該類的所有成員...

const在類和物件中的應用

const在類和物件中的應用 1 常量資料成員的應用 2 函式的引數為常量的應用 3 常量函式的應用 4 常量物件的應用 1.常量資料成員的應用 如果某個類中資料成員是const,表示這個資料成員不能直接被修改,這就要求const資料成員變數需要初始化,但是在類中,資料成員不允許在類裡定義時初始化。...