1. 建構函式不需要使用者呼叫它,而是建立物件的時候自動執行。
2. 可以用乙個類物件來初始化另乙個類物件,如:
time t1;
time t2=t1;
3. 如果使用者自己沒有定義建構函式,則c++
系統會自動生成乙個建構函式,知識這個建構函式體是空的,也沒有引數,不執行任何操作。乙個類只有乙個預設建構函式。
4. 用引數初始化列表對資料成員初始化,如下:
box::box(int h,int w):height(h),width(w)
5. 建構函式過載
引數個數或引數型別不同,如下:
box::box(int h);
box::box(int h,int w);
1. 如果乙個函式中定義了乙個物件,當這個函式被呼叫結束時,物件應被釋放,在物件釋放前自動執行析構函式。
2. 靜態區域性變數在函式呼叫結束時物件並不是釋放,只有在main
函式結束或呼叫
exit
函式結束程式時,才呼叫
static
區域性變數的析構函式。
3. 如果用new
建立乙個物件,當用
delete
釋放該物件時,先呼叫該物件的析構函式。
4. 析構函式並不是刪除物件,而是在撤銷物件占用記憶體之前進行清理工作,使這部分記憶體可以被程式分配給新物件使用。
5. 析構函式沒有函式引數,因此不能被過載。
6. 先構造的後析構。相當於棧,先進後出。
1. student stud [50]
物件陣列的每乙個元素都是同類的物件。
如果有50
個元素,則需要呼叫
50次建構函式。
2. 如果建構函式只有乙個引數,在定義陣列時可以直接初始化。如下:
student stud [3] =;
3. student stud [3] =
1. 乙個物件儲存空間的起始位址就是物件的指標。
time *p;
time t1;
p=&t1;
(*p).hour 等價於
p->hour
2. 指向成員函式的指標
三點需要相互匹配:
(1). 函式引數的型別和引數個數
(2). 函式返回值型別
(3). 所屬的類
如下:void(*p)()
p=fun; //將
fun函式的入口位址賦給指標p
(*p)();
顯然不符合第三點,p
與類無關,因此不能在類外直接用成員函式名作為函式入口位址去呼叫成員函式。
修改如下:
void(time::*p)(); //定義
p為指向
time
類中公共成員函式的指標變數。
p=&time::get_time;
3. 指向當前物件的this
指標在每個成員函式中都包含乙個特殊的指標,this
指標。它是指向本類物件的指標,它的值是當前被呼叫的成員函式所在的物件的起始位址。
例如:當呼叫成員函式a.volume()
時,編譯系統就把物件
a的起始位址賦給
this
指標。
int box::volume()
a.volume();
c++把它處理為
int box::volume()
a.volume(&a);
由於this指向a
,所以相當於:
(a.height)*(a.width)*(a.length)
1. time const t1(12,34,56); / const time t1(12,34,56);
在t1的生命週期中,物件
t1的所有資料成員的值都不能被修改
2. 常物件只能呼叫常成員函式,不能呼叫該物件的普通成員函式(除了構造和析構函式)
1. 常資料成員:只能通過建構函式的引數初始化表對常資料成員進行初始化,任何其他函式都不能對常資料成員賦值。
2. 常成員函式:只能引用本類的資料成員,不能修改。不能呼叫另乙個非const
成員函式。
void get_time() const;
形式: 類名 * const
指標變數名
time * const ptr1;
注意:指向物件的常指標變數的值不能改變,始終指向同乙個物件,但可以改變其所指向物件的值。
const char *ptr;
1. 如果乙個變數已經宣告為常變數,只能用指向常變數的指標來指向它。如下:
const char c=」boy」;
const char * p1;
p1=c; //合法
char *p2 =c; //錯誤,
p2不是指向常變數的指標。
2. 指向常變數的指標也可以指向非const
的變數,但是不能通過指標來修改變數的值,如下:
char c=』a』;
const char * p;
p=&c;
*p=』b』; //錯誤
c=』b』; //合法
3. 指向常變數的指標既可以指向const
變數也可以指向非
const
變數,而指向非
const
變數的指標只能指向非
const
變數。形式:類名 物件2
(物件1)
定義語句: 類名(類名 &
物件),例如:box(box &b)
如果希望各物件中的資料成員的值是一樣的,就把它定義為靜態資料成員。
1. 它為各物件所共有,在記憶體中只佔乙份空間。
2. 靜態資料成員只能在類體外進行初始化。不能用引數初始化表對靜態資料成員初始化。
如果未初始化,系統自動設定為0
。int box::height=10;
3. 靜態資料成員不屬於物件,而是屬於類的。
4. 有了靜態資料成員,各物件之間的資料有了溝通的渠道,實現資料共享,可以不使用全域性變數。全域性變數破壞了封裝的原則,不符合物件導向程式的要求。
1. 在類外呼叫公用的靜態成員函式,形式如下:
box::volume();
2. 靜態成員函式沒有this
指標,因此不能訪問本類中的非靜態成員。
在c++
中,靜態成員函式主要是用來訪問靜態資料成員。
1. friend函式不僅可以是一般函式,也可以是另乙個類中的成員函式。
1. 類模板是類的抽象,類是類模板的例項。
2. template型別引數名
>
class 類模板名{
int main{
類模板名 <
實際型別名
>
物件名(
參數列);
日語學習 第2課 本( )
1.這個 那個 那個 更遠 哪個 參考 標日初上 第2課 第1個語法 a 何 這是什麼?b 本 那是書。2.名 名 這個 那個 那個 更遠 的名1是名2 參考 標日初上 第2課 第4個語法 這個照相機是史密斯先生的。3.名1 誰 名1是誰的呢 誰 表示所有,其回答可以直接用 人物名詞 後面省略了問句...
C 學習筆記 2
ref 和out 都是是傳遞引用,out是返回值,兩者有一定的相同之處,不過也有不同點。使用ref 前必須對變數賦值,out不用。out的函式會清空變數,即使變數已經賦值也不行,退出函式時所有 out引用的變數都要賦值,ref引用的可以修改,也可以不修改。下面是使用 out和 ref進行陣列修改的例...
C 學習筆記(2)
定義 namespace a namespace a 系統會自動合併這兩個 使用時在前面加上using namespace a 或者a var來呼叫命名空間a中的變數和函式。wchar t雙位元組型變數,佔據2位元組,而char只佔據1位元組 wchar t wc l 中國 setlocale lc...