初夏小談 類和物件(二)之建構函式

2021-09-12 14:56:24 字數 2476 閱讀 9558

如果乙個類中什麼成員什麼也沒有,稱它為空類。但是它裡面真的什麼也沒有嗎?在c++中空類中會預設生成6個成員函式。首先來說說第乙個建構函式。

一、什麼是建構函式?

1.概念:建構函式是一種特殊的成員函式,它與類名相同,在建立類型別物件時,由編譯器自動呼叫初始化物件,為物件賦乙個合適的初始值,並且在物件生命週期內只呼叫一次。

2.建構函式為什麼只呼叫一次?

這是因為建構函式只在物件建立的時候呼叫的。

測試如下:

#pragma once

#includeusing namespace std;

//日期類

class date

;

#include"lei.h"

//日期類函式

void date::setdate(int year, int month, int day)

void date::printdate()

date::date()

date::date(int year, int month, int day)

#include"lei.h"

//測試建構函式是否只調一次

void gouzaotest()

int main()

顯示結果:

二、建構函式的特徵:

①:與類名相同

②:無返回值型別

③:建立類型別物件時編譯器自動呼叫、

④:可以過載(上面**中建構函式已經過載)

建構函式data()乙個無參,乙個含三個引數,我在此給了兩個預設值。不能給三個是因為會存在二義性,編譯器不知調哪乙個。

三、建構函式的作用

為建立的物件賦乙個合適的初始值。而不是開闢空間建立物件。

四、當類中我們沒有自定義建構函式時,編譯器就會自動建立。如果使用者自定義了建構函式,編譯器便不再建立。

五、建構函式可以過載,無參的建構函式和全預設的建構函式都是預設的建構函式,預設的建構函式只能存在乙個,無參建構函式,全預設建構函式,編譯器自己生成的建構函式都是預設成員函式。

六、編譯器生成的建構函式一定是無參的為什麼?

這是因為如果傳遞帶引數的,那麼物件生成時務必要給它傳參,而我們並不清楚要傳什麼型別的資料。

七、編譯器自動生成的預設建構函式給類型別物件設定的值是隨機值,那麼為什麼還要建構函式?

在說明這個問題前先看乙個例子:

標頭檔案:

#pragma once

#includeusing namespace std;

//時間類

class time

;//日期類

class date2

;

函式體:

#include"lei.h"

//時間類函式

void time::settime(int hour, int minute, int second)

void time::printtime()

time::time()

void date2::setdate(int year, int month, int day)

void date2::printdate()

date2::date2(int year, int month, int day)

主函式:

#include"lei.h"

int main()

結果顯示:

在上面這個例子中,我建立了乙個日期類物件,但這個物件裡面有乙個特殊的成員變數time類型別物件_t。當建立物件d時為其初始化時會初始化裡面的變數_t,如果沒有建構函式,那麼我為_t設定的屬性值將無法賦予。

總結如下:c++中的型別分內建型別和自定義型別,當data類沒有自定義建構函式時,編譯器就會自動生成建構函式,再對date類裡面的time類物件初始化時,發現不是內建型別,而是類型別則按類再次進行初始化,發現裡面有自定義建構函式,就會呼叫其函式來初始化time類物件。如果沒有建構函式,那麼編譯器就不會自動對time類物件進行初始化。而自定義建構函式就沒什麼用了。

珍&原始碼

初夏小談 類和物件(一)

所以在c 中把處理問題的步驟進行包裝就形成了類。這個類可以處理特定的問題,而不用去關注它是怎麼一步步處理的。在c 中類用class來標識,struct也可以。類中不僅可以定義變數,還可以定義函式。例如 struct student void printstu 成員變數 char name 20 ch...

類和物件 複製建構函式

形如x x x 或x x const x 二選一,後者能以常量物件作為引數 class complex complex c1 呼叫預設無參建構函式 complex c2 c1 呼叫預設的複製建構函式,將 c2 初始化成和c1一樣class complex complex const complex ...

python函式物件和閉包小談

一,函式物件 函式物件指的是函式可以被當做 資料 來處理,具體可以分為四個方面的使用,如下 1.1函式可以被引用 defadd x,y return x y.func add func 1,2 31.2函式可以作為容器型別的元素 dic dic dic add 1,2 31.3函式可以作為引數傳入另...