C++中的建構函式委託


我們將在本文中瞭解建構函式委託是什麼。當一個建構函式呼叫同一類的其他建構函式時,這就是建構函式委託。此功能出現在C++11版本中。

讓我們看看以下程式,嘗試分析這段程式碼中有哪些難點。

示例

#include <iostream>
using namespace std;
class MyClass {
   int a, b, c;
   public:
   MyClass(){
      a = b = c = 0;
   }
   MyClass(int c) {
      // Initializing a and b are redundent, only c initialization is needed here
      a = 0;
      b = 0;
      this->c = c;
   }
   void display(){
      cout << "a : " << a << ", b : " << b << ", c : " << c;
   }
};
main() {
   MyClass my_obj(5);
   my_obj.display();
}

輸出

a : 0, b : 0, c : 5

我們可以看到,此程式碼執行正常,但這段程式碼中有一些冗餘程式碼。無引數的建構函式可以將a和b的值設定為1。因此,如果我們在第二個建構函式中使用第一個建構函式,這樣會更加有效。因此,我們必須使用一個名為建構函式委託的方法。

示例

#include <iostream>
using namespace std;
class MyClass {
   int a, b, c;
   public:
   MyClass(){
      a = b = c = 0;
   }
   MyClass(int c) : MyClass(){ //using constructor delegation
      this->c = c;
   }
   void display(){
      cout << "a : " << a << ", b : " << b << ", c : " << c;
   }
};
main() {
   MyClass my_obj(5);
   my_obj.display();
}

輸出

a : 0, b : 0, c : 5

更新於: 30-7-2019

1000+瀏覽

開始您的職業生涯

透過完成此課程獲得認證

開始
廣告
© . All rights reserved.