C++ 如何在構造函數中調用構造函數?

C++ 如何在類的構造函數中調用已經寫好的構造函數

讓我們先看一段代碼:

#include<iostream>
using namespace std;
int main()
{
    int a = 12;
    cout << a << endl;
    int* p = new (&a) int(15);
    cout << *p << endl;
}

你可能會感慨,爲什麼要做這種摳腳操作?
確實,這種做法是很無聊的,但是我們也發現這樣做有一個特點:我們可以在已有的已經申請的內存上調用構造函數對其進行初始化。
那就算能這麼做又有什麼意義呢?

假設我們有一個寫好的構造函數A(int,int),我們現在想要重載一個構造函數A(int,int,int),但是新的構造函數除了部分操作外,其他基本和原來寫好的構造函數一致,這就出現了極大的代碼重複。代碼重複是令我們噁心的一點,但是我們又不能直接在新寫的構造函數中調原構造函數。之前那個摳腳的操作就起到作用了。

#include <iostream>
using namespace std;
class A
{
  private:
      int a;
  public:
      A(int);
      A(int,int);
};
A::A(int _a)
:a(_a)
{
    cout << "調用舊的構造函數"  << endl;
}
A::A(int _a,int)
{
    new(this) A(_a);
    cout << "調用新的構造函數"  << endl;
    cout << a << endl;
}
int main()
{
    A a(12,12);
    //我們發現即調用了新的構造函數又調用了舊的構造函數
    //因爲我們在新的構造函數中調用了舊的構造函數
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章