類和物件(下)

2021-08-23 14:12:26 字數 3481 閱讀 5719

1.什麼是建構函式

建構函式是一種隨著物件建立而被呼叫的公有成員函式,有且僅在定義物件時自動執行一次,它的主要用途是為物件做初始化。

2.建構函式的特點:

3.初始化列表

格式:以乙個冒號開始,接著是乙個逗號分割的資料成員列表,每個「成員變數」後面跟乙個放在括號中的初始值或表示式

注意點:1.每個成員在初始化列表中只能出現一次。

2.初始化列表僅用於初始化類的資料成員,並不指定這些資料成員的初始化順序,資料成員在類中定義順序就是初始化                     列表中的初始化順序。

3.盡量避免使用成員初始化成員,成員的初始化順序最好和陳媛的定義順序保持一致。

4.類中包含以下成員,一定要放在初始化列表位置進行初始化。

1)  引用成員變數

2)const成員變數

3)類型別成員(且物件所對應的類沒有預設的建構函式)

4.建構函式的作用

1)構造物件並且初始化

2)型別轉化:對於單參建構函式,可以將其接收引數轉化成類型別物件。

禁止型別轉化:用explicit 修飾建構函式。

3)如果乙個類未顯式定義建構函式時,編譯器會合成乙個預設的建構函式(此建構函式一定不帶引數),如果顯式定義了,編譯器將不再合成。

1.什麼是析構函式

當乙個物件生命週期結束時,c++編譯系統會自動呼叫乙個成員函式,該成員函式就是析構函式。

2.析構函式的特點:

物件宣告週期結束時,c++編譯系統會自動呼叫,析構函式體內不是刪除物件(編譯器來做),而是做一些物件刪除前的相關清理工作。

1.什麼是拷貝建構函式

建立物件時使用同類物件來進行初始化,這時使用的建構函式為拷貝建構函式。

2.拷貝建構函式函式的特點:

1.作用:為了增強程式的可讀性。

2.運算子過載的特徵:

3.   5個c++不能過載的運算子: .*    ::    sizeof   ?:   .

1.賦值運算子的過載是對乙個已經存在的物件進行拷貝賦值

2.當程式沒有顯示地提供乙個本類或本類的引用為引數的賦值運算子過載函式時,編譯器會自動生成乙個這樣乙個賦值運算子過載函式。

1.深拷貝:如果乙個類擁有資源(堆,或是其他系統資源),當這個類的物件發生複製過程的時候,資源也進行相應複製。

2.淺拷貝:如果乙個類擁有資源(堆,或是其他系統資源),當這個類的物件發生複製過程的時候,並未複製資源。

const修飾類成員:

1.const 修飾類成員變數時,該成員變數 必須在建構函式的初始化列表中初始化。

2.const修飾類成員函式,實際修飾該成員函式的this指標,該成員函式中不能對類的任何成員進行修改。

3.在const修飾的成員函式可能需要對某個成員變數進行修改,該成員變數只需被mutable關鍵字修飾即可。

注意點:

const物件可以呼叫const成員函式,不可以呼叫非const成員函式。

非const物件對const成員函式和非const成員函式都可以呼叫。

const成員函式可以呼叫const成員函式,不可以呼叫非const成員函式。

非const成員函式對const成員函式和非const成員函式都可以呼叫。

這兩個預設成員一般不用重新定義,除非你只是想讓別人獲取到你指定的內容。

1.分類:友元函式和友元類

2.友元函式:可以直接訪問類的私有成員,它是定義在類外部的普通函式,不屬於任何類,在類的內部宣告,宣告時要加上

friend關鍵字。

1).說明:

友元函式可以訪問類的私有成員,但不是類的成員函式。

友元函式不能用const修飾。

友元函式可以在類定義的任何地方宣告,不受類訪問限定符限制

乙個函式可以是多個類的友元函式。

友元函式的呼叫與普通函式的呼叫和原理相同。

3.友元類:友元類的所有成員函式都可以是另乙個類的友元函式,都可以訪問另乙個類中的非公有成員。

4.友元的特點

友元關係是單向的,不具有交換性。

友元關係不能傳遞

友元關係不能繼承

5.友元的優缺點

優點:提高了程式執行效率

破壞了類的封裝性和隱藏性

1.概念:宣告為static 的類成員稱為類的靜態成員,用static 修飾的成員變數,稱之為靜態成員變數 ;用static 修飾的成員函                        數,稱之為靜態成員函式。靜態的成員變數一定要在類外進行初始化。

2.特性:

1)靜態成員為所有類物件所共享,不屬於某個具體的例項。

2) 靜態成員變數必須在類外定義,定義時不新增static關鍵字。

3) 類靜態成員可用 類名::靜態成員 或者像普通物件成員來訪問。

4) 靜態成員函式沒有隱藏的this指標,所以不能訪問任何非靜態成員。

5) 靜態成員和類的普通成員一樣,也有public、protected、private3中訪問級別,也可以具有返回值,const修飾等引數

3. 問題:

1)靜態成員函式可以呼叫非靜態成員函式嗎

分析:不可以。因為靜態成員函式沒有this 指標,而非靜態成員函式需要傳遞this指標來訪問。

2) 非靜態成員函式可以呼叫類的靜態成員函式嗎?

分析:可以。因為靜態成員為所有類物件所共享。

類和物件(下)

1.建構函式體賦值 因為初始化初始化一次而建構函式可以進行多次賦值,所以不能稱為初始化。2.初始化列表 以乙個冒號開始,接著是乙個以逗號分隔的資料成員列表,每個 成員變數 後面跟乙個放在括 號中的初始值或表示式 1 每個變數在初始化列表中只能出現一次 2 類中包含以下成員,必須放在初始化列表位置進行...

類和物件(下)

1.建構函式的初始化 include using namespace std class student private int id int name 對於上面這個類來說,呼叫建構函式的時候,物件中已經有了乙個類的初始值。但是不能將其當作類物件成員的初始化,建構函式體內的語句只能將其稱作賦初值,而...

C 類和物件(下)

2.static成員 3.c 11的成員初始化新玩法 4.友元 5.內部類 如下 class date private int year int month int day 如下 class date private int year int month int day 無explicit 如下 c...