C/C++——建構函式、複製建構函式和解構函式的執行時刻
指出下面程式的輸出結果:
<span style="font-size:14px;">/*************************************************************************
> File Name: test.cpp
> Author:
> Mail:
> Created Time: 2016年01月16日 星期六 20時32分46秒
************************************************************************/
#include <iostream>
using namespace std;
class A
{
public:
A(){cout << "A" << endl;}
~A(){cout << "~A" << endl;}
};
class B
{
public:
B(){cout << "B" << endl;}
B(A & a):_a(a){cout << "B(a)" << endl;}
~B(){cout << "~B" << endl;}
private:
A _a;
};
int main()
{
A a;
B b(a);
return 0;
}
</span>
這個題目是考察對建構函式和解構函式以及複製建構函式的瞭解
1: A a; 該語句會呼叫類A的建構函式,所以會輸出A;
2: B b(a); 該語句中的a是上面的物件,所以不會再次輸出A,又因為該語句是生成物件b並呼叫類B的複製建構函式,會輸出B(a);
你可能會奇怪,物件b中有一個成員是物件_a ,但是沒有輸出A,這是因為在生成物件b的時候也是生成物件_a的時候,它會呼叫類A的複製建構函式,此時是不會呼叫類A的建構函式的,所以不會輸出A。
3: 建構函式和解構函式是對稱的。當離開程式的時候會執行物件的解構函式。首先是執行物件b的解構函式(輸出~B),再是物件b中物件_a的解構函式(輸出~A),最後會執行物件a的解構函式(輸出~A)。
程式的輸出結果如下:
<span style="font-size:14px;">A
B(a)
~B
~A
~A</span>
例子2:將main函式裡宣告一個類B的物件c ,main函式如下:
<span style="font-size:14px;">int main()
{
B c;
return 0;
}</span>
B c; 首先會呼叫類A的建構函式來構造物件_a輸出A,然後呼叫類B的建構函式輸出B;
離開程式的時候會先執行類B的解構函式輸出~B,然後再呼叫類A的解構函式輸出~A;
程式的輸出結果如下:
A
B
~B
~A
相關文章
- C++ 建構函式和解構函式C++函式
- C++ 類建構函式和解構函式C++函式
- C++再議建構函式及複製建構函式深度複製C++函式
- C++複製建構函式C++函式
- C++入門記-建構函式和解構函式C++函式
- [C++]顯示呼叫建構函式和解構函式C++函式
- 預設建構函式、引數化建構函式、複製建構函式、解構函式函式
- C++建構函式解構函式的執行過程C++函式
- 類的建構函式和解構函式函式
- C++建構函式和解構函式呼叫虛擬函式時使用靜態聯編C++函式
- 【C++】建構函式C++函式
- C++建構函式C++函式
- C++複製控制:拷貝建構函式C++函式
- Objective-C學習筆記---建構函式和解構函式Object筆記函式
- 【C++】初始化列表建構函式VS普通建構函式C++函式
- C++中建構函式,拷貝建構函式和賦值函式的詳解C++函式賦值
- C++ 移動構造和複製建構函式匹配C++函式
- C++語言之結構體、類、建構函式、拷貝建構函式C++結構體函式
- 深層複製建構函式函式
- c# tcbs之建構函式呼叫建構函式示例C#函式
- 建構函式與解構函式函式
- c++建構函式詳解C++函式
- 消除複製建構函式和“模板式複製建構函式”中的冗餘程式碼 (轉)函式
- C/C++—— 預設建構函式是否會執行C++函式
- ## 建構函式函式
- 建構函式函式
- c++建構函式詳解薦C++函式
- [譯] 建構函式已死,建構函式萬歲!函式
- C++ Daily 《3》----建構函式可否是虛擬函式C++AI函式
- c++ 的學習 建構函式1C++函式
- 虛解構函式(√)、純虛解構函式(√)、虛建構函式(X)函式
- 迴圈單連結串列建構函式、解構函式C++實現函式C++
- C++複製控制:賦值操作符和解構函式C++賦值函式
- C/C++—— C++中建構函式不能是虛擬函式的原因分析C++函式
- JavaScript 建構函式JavaScript函式
- 建構函式、this、static函式
- PHP筆記:建構函式與解構函式PHP筆記函式
- C++型別轉換建構函式C++型別函式