C 之預設成員函式 一

2021-10-10 08:15:38 字數 2863 閱讀 6659

1. 首先得知道什麼是預設成員函式

所謂預設成員函式就是使用者沒有顯示實現該成員函式,編譯器會替使用者實現乙份,沒有顯示定義就是沒有自己實現

2. 其次要知道預設成員函式有哪些
任何乙個類在我們不寫的情況下,都會自動生成下面6個預設成員函式

3. 下面我將對以上6個預設成員函式做詳細解釋

(1)建構函式

作用:建立物件,初始化成員變數

構造函式呼叫時機:當建立物件時,由編譯器自動來進行呼叫,並且在物件的生命週期內只呼叫一次

特點

a. 函式名與類名相同

b. 無返回值

c. 可以過載

注意

a. 當呼叫無參建構函式建立物件時,物件之後一定不能跟(),否則就成為函式宣告,而不是建立物件

b. 若沒有顯式定義建構函式,編譯器預設生成無參的預設建構函式

c. 無參建構函式和全預設的建構函式都稱為預設建構函式,且只能存在乙個

// 以日期類為例

#include

using

namespace std;

class

date

// 過載建構函式

date

(int year,

int month,

int day)

private

:int _year;

int _month;

int _day;};

void

testdate()

建構函式還有乙個更重要的作用,那就是初始化成員變數

初始化列表:是成員變數定義的地方

哪些變數需要初始化

a. 引用:引用在定義時必須要初始化,在初始化列表中定義

b. const成員變數必須在初始化列表中初始化

c. 沒有預設構造的自定義成員必須在初始化列表中初始化

d. 如果自定義型別有預設構造,編譯器會在初始化列表中自動呼叫

e. 如果成員變數全為內建型別,沒有在初始化列表初始化,初始值為隨機值

初始化順序:成員變數在類中的宣告次序就是在初始化列表中的初始化順序

初始化次數:每個成員變數在初始化列表中只能出現1次

// 成員變數初始化

date

(int year,

int month,

int day)

:_year

(year)

,_month

(month)

,_day

(day)

// c++11中新的初始化方式:

class

aprivate

:// 成員變數是宣告

// c++11 初始化方式,相當於乙個預設值

int _a =1;

};

(2) 析構函式
作用:銷毀物件,物件刪除前的相關清理工作

呼叫時機:當物件銷毀時編譯器自動呼叫

特點

a. 析構函式名是在類名前加上字元 ~

b. 無引數,無返回值

c. 乙個類只有乙個析構函式,若為顯式定義,編譯器使用預設的析構函式

注意

a. 物件生命週期結束時,c++編譯系統系統自動呼叫析構函式

~

date()

(3) 拷貝建構函式
作用:用已經存在的物件構造新物件,本質上是建構函式的過載

引數比較特殊:引數是物件

場景:用乙個已經存在的物件建立乙個本身完全相同的物件時,編譯器自動呼叫拷貝建構函式

注意:傳引用,傳值會無限呼叫

class

date

date

(const date& d)

private

:int _year;

int _month;

int _day;

};

特性

a. 拷貝構造是建構函式的一種過載形式

b. 編譯器建立物件時自動呼叫

c. 用物件建立新的物件時自動呼叫

d. 引數必須為引用型別,最好加上const限制(匿名變數:其實就是乙個表示式的結果,是值而不是「變數」)

e. 如果不顯式定義,編譯器會自動生成

f. 自動生成的拷貝構造完成位元組拷貝/記憶體拷貝/淺拷貝

g. 什麼時候拷貝構造必須自己定義:當物件有資源的時候(如果呼叫預設的拷貝建構函式,在釋放的時候會造成二次釋放的問題)具體見下圖

C 預設成員函式

概念 object oriented programming,縮寫 oop 是一種程式設計范型,同時也是一種程式開發的方法。物件指的是類的例項,將物件作為程式的基本單元,將程式和資料封裝其中,以提高軟體的重用性 靈活性和擴充套件性。c 不是純物件導向語言,而是基於物件導向的語言 ps 因為它包含c的...

C 類與物件之預設成員函式

所有類建立物件時會自動生成六個預設函式。但有時候預設函式不能滿足需求,可以自己建立對應函式,來代替預設函式。初始化和清理 建構函式 析構函式 拷貝複製 賦值過載函式 拷貝建構函式 const物件取位址過載class date date private int year int mouth int d...

c 類的預設成員函式

類的組成包括資料成員與成員函式。在類中一共有有六個預設成員函式,建構函式 拷貝建構函式 析構函式 賦值操作符過載 取位址操作符過載 const修飾的取位址操作符過載 利用乙個例項 日期類 進行舉例 先是定義乙個日期類 class date 這就是乙個簡單的類定義。下面依次介紹各個預設成員函式 一.建...