引言:類的6個預設的成員函式包括:
建構函式
析構函式
拷貝建構函式
賦值運算子過載函式
取位址操作符過載
const修飾的取位址操作符過載。
這裡預設的意思是如果你不定義,則編譯器會自動生成,而在實際操作中,我們往往自己實現前四個,後兩個讓編譯器自動生成建構函式,顧名思義,為物件分配空間,進行初始化。它是一種特殊的成員函式,具有以下特點:
函式名與類名相同。
無返回值。
構造物件的時候系統會自動呼叫建構函式。
可以過載。
可以在類中定義,也可以在類外定義。
如果類中沒有給出建構函式,編譯器會自動產生乙個預設的建構函式,如果類中有建構函式,編譯器就不會產生預設建構函式。
全預設的建構函式和無參的建構函式只能有乙個,否則呼叫的時候就會產生衝突。
沒有this指標。因為建構函式才是建立物件的,沒有建立物件就不會有物件的首位址。
舉個例子:
class
date
date
(int year =
1900
,int month =1,
int day =1)
//全預設的建構函式
date
(int year,
int month,
int day)
:_year
(year)
,_month
(month)
,_day
(day)
private
:int m_year;
int m_month;
int m_day;};
intmain()
建構函式的寫法通常有三種, 盡量使用初始化列表初始化,因為不管你是否使用初始化列表,對於自定義型別成員變數,一定會先使用初始化列表初始化。
每個成員變數在初始化列表中只能出現一次(初始化只能初始化一次)
類中包含以下成員,必須放在初始化列表位置進行初始化:
引用成員變數
const成員變數
自定義型別成員(該類沒有預設建構函式)
成員變數在類中宣告次序就是其在初始化列表中的初始化順序,與其在初始化列表中的先後次序無關
析構函式是一種特殊的成員函式,具有以下特點:
析構函式函式名是在類名加上字元~。
無引數無返回值(但有this指標)。
乙個類有且只有乙個析構函式,所以肯定不能過載。若未顯示定義,系統會自動生成預設的析構函式。
物件生命週期結束時,c++編譯系統系統自動呼叫析構函式。
注意析構函式體內並不是刪除物件,而是做一些清理工作。
注意:物件生命週期結束後,後構造的物件先釋放,符合棧的思想。
舉例:最明顯的例子,棧。在棧的實現中。必不可少的一項就是銷毀函式。我們在這裡就可以借助棧的銷毀來理解析構函式。
typedef
int datatype;
class
seqlist
~seqlist()
//析構函式
}private
:int
* _pdata ;
size_t _size;
size_t _capacity;
};
拷貝建構函式是建構函式的乙個過載形式。
拷貝建構函式的引數只有乙個且必須使用引用傳參,使用傳值方式會引發無窮遞迴呼叫。
class
date
date
(const date& d)
private
:int _year;
int _month;
int _day;
};
c++為了增強**的可讀性引入了運算子過載,運算子過載是具有特殊函式名的函式,也具有其返回值型別,函式名字以及引數列表,其返回值型別與引數列表與普通的函式類似。
函式名字為:關鍵字operator後面接需要過載的運算子符號。
函式原型:返回值型別 operator操作符(引數列表)
運算子過載的意義:增強**可讀性、讓自己定義的型別可以實現運算
舉例下面的例子,這裡將「=」過載,後續就可以直接實現乙個物件對另乙個物件的直接賦值
class
date
date (
const date& d)
date&
operator=(
const date& d)
}private
:int _year ;
int _month ;
int _day ;
};
將const修飾的類成員函式稱之為const成員函式,const修飾類成員函式,實際修飾該成員函式隱含的this指標,表明在該成員函式中不能對類的任何成員進行修改。static修飾的成員稱為靜態成員,靜態成員為所有類物件所共享,不屬於某個具體的例項
靜態成員變數必須在類外定義,定義時不新增static關鍵字
類靜態成員即可用類名::靜態成員或者物件.靜態成員來訪問
靜態成員函式沒有隱藏的this指標,不能訪問任何非靜態成員
C 中類的6個預設成員函式
1.建構函式 建構函式是乙個特殊的成員函式,名字與類名相同,建立類型別物件時,由編譯器自動呼叫,在物件的生命週期內隻且值呼叫一次,以保證每個資料成員都有乙個合適的初始值。建構函式特性 1 函式名與類名相同。2 沒有返回值。3 有初始化列表 可以不用 4 新物件被建立,由編譯器自動呼叫,且在物件的生命...
C 中類的6個預設成員函式
注意 注意 注意 注意 簡單歸納 函式返回值 引數作用 建構函式 無返回值 有參和無參兩種 初始化物件 析構函式 無返回值 無引數物件生命週期結束時,在物件刪除前做清理工作 拷貝建構函式 無返回值 引用型別的引數 用已存在的物件建立新的對像 運算子過載 不定至少有乙個 方便c 中的操作 還有兩個預設...
C 類的6個預設成員函式
1.概念 名字與類名相同,建立類型別物件時由編譯器自動呼叫,保證每個資料成員都有乙個合適的初 始值,並且在物件的生命週期內只呼叫一次。2.特性 雖然名字叫構造,但其主任務並不是開闢空間建立物件,而是初始化物件。函式名與類名相同,無返回值,物件例項化時編譯器自動呼叫對應的建構函式,建構函式可以過載,通...