如果乙個類中什麼成員什麼也沒有,稱它為空類。但是它裡面真的什麼也沒有嗎?在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函式可以作為引數傳入另...