C++類和物件.四個預設成員函式(賦值運算子過載)
1.(1)類的定義
類就是具有相同資料和相同操作的一組物件的集合。
學生類定義:
class student
{
//成員變數
char* name;
int age;
int sex;
//成員函式
void speak()
{
cout<<name<<"年齡是"<<age<<endl;
}
};
注:類的大小與普通資料成員有關,與成員函式和靜態成員無關。空類大小為1.
(2).訪問限定符
public:宣告對類的外部介面,所有來自外部的訪問通過介面進行。
private:只允許本類的成員函式來訪問,類外部的訪問都是非法的。
protected:介於公有和私有型別之間,只有本類和派生類可以訪問。
(3).面向物件封裝性
封裝是指把資料和現實操作的程式碼集中起來放在物件內部,並儘可能的隱蔽物件的內部細節。
封裝具有兩層含義:
a.有關資料+操作程式碼封裝在一個物件內,各個物件相互獨立,互不干擾。
b.物件中的有些資料+操作程式碼對外隱蔽稱作資訊隱蔽。
注:資訊隱蔽有利於資料安全,防止無關人員訪問和修改。
2.四個預設成員函式
(1)建構函式
私有成員變數要對他們進行初始化,必須用一個公有的成員函式進行,同時這個函式應該在定義物件時執行一次,這是呼叫的函式稱為建構函式。
建構函式是特殊的成員函式
特徵:
a.函式名與型別相同
b.無返回值
c.物件構造(物件例項化)時系統自動呼叫對應的建構函式
d.建構函式可以過載
e.建構函式可以在類中定義,也可以在類外定義
f.如果類定義中沒有給出建構函式,則C++編譯器自動產生一個預設的建構函式,只要我們自己定義了一個建構函式,系統就不會自動生成預設的建構函式
g.無參的建構函式和全預設的建構函式都認為是預設建構函式,並且預設的建構函式只能有一個
(2)拷貝建構函式
建立物件時使用同類物件來進行初始化,這時所用的建構函式稱為拷貝建構函式,拷貝建構函式是特殊的建構函式。
特徵:、
a.拷貝建構函式是一個建構函式的過載
b.拷貝建構函式的引數必須使用引用傳參,使用傳值方式會引發無窮遞迴呼叫
c.若未顯示定義,系統會預設預設的拷貝建構函式。預設的拷貝建構函式會依次拷貝類成員進行初始化
(3)解構函式
當一個物件的生命週期結束時,C++編譯系統會自動呼叫一個成員函式,這個特殊的成員函式即解構函式。
特點:
a.解構函式在類名前加上字元~
b.解構函式無引數無返回值
c.一個類有且僅有一個解構函式,若未顯示定義,系統會自動生成一個預設的解構函式
d.物件生命週期結束時,C++編譯系統自動呼叫解構函式
e.解構函式體內主要完成清理工作
(4)賦值運算子的過載
賦值運算子的過載是一對一已存在的物件進行拷貝賦值。
注:C++不能過載的運算子:: ?: . * sizeof
3.隱含的this指標
(1)除建構函式外每個成員函式都有一個指標形參,稱為this指標,this指標是隱式的。
4.運算子過載
(1)C++只能對已有的C++運算子進行過載,不允許使用者自己定義新的運算子
(2)C++運算子只有少數幾個不能過載:: ?: . * sizeof
(3)C++過載功能應與原來相似,不能改變運算子操作物件的個數,不能改變運算子原有的優先順序.結合特性
(4)運算子過載函式的引數不能全部是C++預定義的基本資料型別
(5)運算子過載函式可以是普通函式、類的成員函式、類的友元函式。