主要完成初始化工作,名字與類名相同,建立類型別物件時由編譯器自動呼叫,保證每個資料成員都有乙個合適的初始值,並且在物件的生命週期內只呼叫一次
class date
// 2.帶參建構函式
date (int year, int month , int day )
private :
int _year ;
int _month ;
int _day ;
};//沒有定義建構函式,物件也可以建立成功,因此此處呼叫的是編譯器生成的預設建構函式
特性:
<1>函式名與類名相同
<2>無返回值
<3>物件例項化時編譯器自動呼叫對應的建構函式
<4>建構函式可以過載
<5>如果類中沒有顯示定義建構函式,則c++編譯器會自動生成乙個無參的預設建構函式
<6>無參建構函式和全預設的建構函式都稱為預設建構函式,並且預設的構函式只能有乙個。注意:無參建構函式、全預設建構函式、我們沒寫編譯器預設生成的建構函式,都可以認為是預設成員函式
<7>編譯器生成的預設建構函式並沒有什麼卵用??
c++把型別分為內建型別(基本型別)和自定義型別
內建型別就是語法已經定義好的型別:如int/char...
自定義型別就是我們使用class/struct/union自己定義的型別
編譯器生成預設的建構函式會對自定型別成員_t呼叫的它的預設成員函式
析構函式:與建構函式功能相反,析構函式不是完成物件的銷毀,區域性物件銷毀工作是由編譯器完成的。而物件在銷毀時會自動呼叫析構函式,完成類的一些資源清理工作
typedef int datatype;
class seqlist
~seqlist()
}private :
int* _pdata ;
size_t _size;
size_t _capacity;
};
特性:析構函式是特殊的成員函式
<1>析構函式名是在類名前加上字元 ~
<2>無引數無返回值
<3>乙個類有且只有乙個析構函式。若未顯式定義,系統會自動生成預設的析構函式
<4>物件生命週期結束時,c++編譯系統系統自動呼叫析構函式
<5>編譯器生成的預設析構函式,對會自定型別成員呼叫它的析構函式
只有單個形參,該形參是對本類型別物件的引用(一般常用const修飾),在用已存在的類型別物件建立新的物件時由編譯器自動呼叫
特徵:
<1>拷貝建構函式是建構函式的乙個過載形式
<2>拷貝建構函式的引數只有乙個且必須使用引用傳參,使用傳值方式會引發無窮遞迴呼叫
<3>若未顯示定義,系統生成預設的拷貝建構函式,預設的拷貝建構函式物件按記憶體儲存按位元組序完成拷貝,這種拷貝我們叫做淺拷貝,或者值拷貝
class date
private:
int _year;
int _month;
int _day; };
int main()
<4>編譯器生成的預設拷貝建構函式已經可以完成位元組序的值拷貝了,但是還需要我們自己實現深拷貝
a.運算子過載
c++為了增強**的可讀性引入了運算子過載,運算子過載是具有特殊函式名的函式,也具有其返回值類型,函式名字以及引數列表,其返回值型別與引數列表與普通的函式類似
函式名字為:關鍵字operator後面接需要過載的運算子符號
函式原型:返回值型別 operator操作符(引數列表)
不能通過連線其他符號來建立新的操作符:比如operator@
過載操作符必須有乙個類型別或者列舉型別的運算元
用於內建型別的操作符,其含義不能改變,例如:內建的整型+,不 能改變其含義
作為類成員的過載函式時,其形參看起來比運算元數目少1成員函式的
操作符有乙個預設的形參this,限定為第乙個形參
. * 、:: 、sizeof 、?: 、. 注意以上5個運算子不能過載
b.賦值運算子過載
1. 引數型別
2. 返回值
3. 檢測是否自己給自己賦值
4. 返回*this
5. 乙個類如果沒有顯式定義賦值運算子過載,編譯器也會生成乙個,完成物件按位元組序的值拷貝
將const修飾的類成員函式稱之為const成員函式,const修飾類成員函式,實際修飾該成員函式隱含的this指標,表明在該成員函式中不能對類的任何成員進行修改
1. const物件可以呼叫其他const成員函式
2. 非const物件可以呼叫非const成員函式和const成員函式
3. const成員函式內可以呼叫其它的const成員函式
4. 非const成員函式內可以呼叫其他const成員函式和非const成員函式
這兩個預設成員函式一般不用重新定義 ,編譯器缺省會生成
這兩個運算子一般不需要過載,使用編譯器生成的預設取位址的過載即可,只有特殊情況,才需要過載,比如想讓別人獲取到指定的內容
class date
const date* operator&()const
private :
int _year ;
int _month ;
int _day ;
};
oc中類和物件
類與物件的概念 類是對同一類事物高度的抽象,類中定義了這一類物件所應具有的靜態屬性 屬性 和動態屬性 方法 物件是類的乙個例項,是乙個具體的事物。類與物件是抽象與具體的關係。類其實就是一種資料型別,它的變數就是物件。類與類之間的關係 繼承關係 a是b如果這句話說的通,在設計程式的時候就可以看成是繼承...
C 類和物件(中)
一 類的六個預設成員函式 1 初始化和清理。建構函式完成初始化,析構函式完成清理 2 拷貝複製 拷貝建構函式使用同類物件建立物件,賦值過載是把乙個物件賦值給另乙個物件 3 取位址和過載 主要是對普通物件和const物件取位址 二,建構函式 1 建構函式是乙個特殊成員函式,名字和類名相同,建立類型別物...
類和物件(中)筆記
1.c 中struct和class的區別是什麼?答 c 需要相容c語言,所以c 中struct可以當成結構體去使用。另外c 中struct還可以用來定義類,和class是定義類是一樣的。區別是struct的成員預設訪問方式是public,class是struct的成員預設訪問方式 是private。...