上**,該說的都在**及注釋裡:
1 #include 2 #include 3 #include 45using
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資料成員變數需要初始化,但是在類中,資料成員不允許在類裡定義時初始化。...