題:請看下面一段程式:
//#include "stdafx.h"
#include #include #include class b
{private:
int data;
public:
b(){ std::cout<
(1)該程式輸出的結果是什麼?為什麼會有這樣的輸出?
(2)b(int i):data(i),這種用法的專業術語叫什麼?
(3)play(5),形參型別是類,而5是個常量,這樣寫合法嗎?為什麼?【英國著名圖形影象公司a2023年面試題】
答案:(1)程式的輸出結果為:
注:5首先轉換成b型別,呼叫乙個有參的建構函式,然後play返回之後,區域性變數b會被析構掉。整個程式返回後,temp會呼叫析構函式。
(2)帶引數的建構函式,冒號後面是成員變數初始化列表(members initialization list)。
(3)合法。單個引數的建構函式如果不新增explicit關鍵字,會定義乙個隱含的型別轉換(從引數的型別轉換到自己);新增explicit關鍵字會消除這種隱含轉換。
C 之建構函式和析構函式
我們已經知道了物件就是類的例項,二者的關係就相當於資料型別與它的變數的關係。每個物件區別於其他物件的地方就是依靠它的自身屬性,即資料成員的值。c 中,物件在定義的時候進行的資料成員的設定,稱為物件的初始化。同樣,在特定物件使用結束時,還要對資料成員進行一些清理工作。c 中對類的初始化和清理的工作,分...
C 之建構函式和析構函式
一 建構函式 1 物件的初始化和建構函式 類是一種抽象的資料型別,它不占用儲存空間,不能容納具體的資料。因此在類宣告中不能給資料成員賦初值。例如 錯誤 class complex 與使用變數一樣,使用物件時也應該先定義,後使用。在定義物件時,對資料成員賦初值,稱為初始化。例如 class compl...
C 之建構函式和析構函式強化
構造與析構呼叫順序 include class test9 1 析構的順序和構造的順序相反,先構造的後析構 test9 1 private int m a 物件初始化列表,解決乙個類中有另乙個沒有無參構造的類的物件的初始化 class test9 2 test9 2 private test9 1 ...