建構函式與析構函式

2022-03-01 07:33:14 字數 1399 閱讀 1552

建構函式:  它是函式,主要是用來構建物件,用來初始化成員變數.

建構函式基本不主動呼叫.系統呼叫.如果沒有建構函式無法構造物件,如果沒有提供建構函式,系統會自動給生成乙個預設的建構函式.

注意: 預設的建構函式沒有引數.

呼叫時機: 當需要建立物件的時候

在構建物件的時候,直接在物件後加小括號來呼叫不同的建構函式

例如: students hello(18,2);

建構函式定義:沒有返回值不可以寫void,函式名就是類名,引數隨意.

複製建構函式(拷貝建構函式)

拷貝構造.通過乙個已經構造的物件,構造乙個新的物件出來.

形式: 類名(類名& 物件名);

注意:如果提供了有引數的構造,還得提供乙個預設構造.

1.拷貝構造同樣的函式名和類名相同,必須傳入相同型別物件的引用.

2.如果沒有提供拷貝建構函式,系統會自動提供,如果提供後系統不再提供.

3.預設提供的形參只會拷貝內容值(只會拷貝指標值),另個物件會使用同乙個記憶體空間,

釋放是會釋放兩次,導致問題出現,所以對於類中new的記憶體,在拷貝構造的時候需要重新申請記憶體,後者叫做深拷貝.

組合關係:

在類中還有其他物件

形式:class a

構建: 先定義的先構建,後定義的後構建.

如果其他類提供預設的建構函式,在當前類的建構函式中可以不寫其他類的構造

如果其他類沒有提供預設構造,則必須在當前類的構造初始化列表中主動呼叫.

特殊成員變數:

const 成員變數 ; 必須在初始化列表中進行初始化.

引申出: 初始化列表----在建構函式最後面加上冒號,加上括號的方式例如students() :m_age(18){} 初始化列表在建構函式之前執行

static 靜態成員變數,不屬於某乙個物件,屬於整個類的,只可以在類外進行初始化,建立多個物件,只有乙份記憶體空間,每個物件都可以去修改靜態成員變數的值.

static變數的使用: 類名::變數名

const 函式

特點: 沒法修改成員變數的值,只可以訪問成員變數

不可以呼叫非const成員函式.

案例: int fun()const{}

析構函式:

當物件建立之後,如果不需要了,程式設計師需要跟蹤,不使用了需要釋放.

作用: 在物件釋放時呼叫,也是系統呼叫,不可以主動呼叫

如果沒提供析構函式,系統預設提供析構.

如果提供了,系統析構函式失效.

樣式: 沒有返回值,函式名是類名前加~,沒有引數.

~student()

呼叫時機: 靜態物件----整個程式結束時析構

區域性物件----當函式結束時

new的物件---呼叫delete時會呼叫析構

注意:物件的儲存是在棧中,所以物件的釋放是先釋放後建立的物件.

建構函式與析構函式

建構函式 主要作用就是為物件初始化。有一點要說的是,在繼承體系彙總,如果在建構函式中,如果沒有指定基類的建構函式,那麼編譯器會在建構函式開頭加入,基類的預設建構函式,這樣就可以初始化基類物件部分 析構函式 對於析構函式,要說的多點,實際也不太複雜,就是加入了virtual 使其具有了多型性質 inc...

建構函式與析構函式

建構函式 先看看建構函式的呼叫順序規則,只要我們在平時程式設計的時候遵守這種約定,任何關於建構函式的呼叫問題都能解決 建構函式的呼叫順序總是如下 1.基類建構函式。如果有多個基類,則建構函式的呼叫順序是某類在類派生表中出現的順序,而不是它們在成員初始化表中的順序。2.成員類物件建構函式。如果有多個成...

建構函式與析構函式

概述 乙個類有兩種特殊的成員函式 建構函式與析構函式。建構函式功能是在建立物件時,給資料成員賦初值,即物件的初始化。析構函式的功能是釋放乙個物件,在物件刪除前,用它做一些記憶體釋放工作,與建構函式的功能相反。建構函式 在物件建立時它會被自動執行,因此變數 物件的初始化 一般都放在建構函式中。1 物件...