1. 程式人生 > >C++類和物件.四個預設成員函式(賦值運算子過載)

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)運算子過載函式可以是普通函式、類的成員函式、類的友元函式。