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次
(2) 析構函式// 成員變數初始化
date
(int year,
int month,
int day)
:_year
(year)
,_month
(month)
,_day
(day)
// c++11中新的初始化方式:
class
aprivate
:// 成員變數是宣告
// c++11 初始化方式,相當於乙個預設值
int _a =1;
};
作用:銷毀物件,物件刪除前的相關清理工作呼叫時機:當物件銷毀時編譯器自動呼叫
特點:
a. 析構函式名是在類名前加上字元 ~
b. 無引數,無返回值
c. 乙個類只有乙個析構函式,若為顯式定義,編譯器使用預設的析構函式
注意:
a. 物件生命週期結束時,c++編譯系統系統自動呼叫析構函式
(3) 拷貝建構函式~
date()
作用:用已經存在的物件構造新物件,本質上是建構函式的過載引數比較特殊:引數是物件
場景:用乙個已經存在的物件建立乙個本身完全相同的物件時,編譯器自動呼叫拷貝建構函式
注意:傳引用,傳值會無限呼叫
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 這就是乙個簡單的類定義。下面依次介紹各個預設成員函式 一.建...