C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

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に設定できます。したがって、最初のコンストラクターを2番目のコンストラクターに使用すると、より効果的になります。このため、コンストラクター委任と呼ばれるメソッドを使用する必要があります。

#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

  1. C++でのコンストラクターと代入演算子のコピー

    コピーコンストラクタと代入演算子は、あるオブジェクトを別のオブジェクトに初期化するために使用されます。それらの主な違いは、コピーコンストラクタが新しいオブジェクト用に個別のメモリブロックを作成することです。ただし、代入演算子は新しいメモリ空間を作成しません。参照変数を使用して、前のメモリブロックを指します。 コピーコンストラクタ(構文) classname (const classname &obj) { // body of constructor } 代入演算子(構文) classname Ob1, Ob2; Ob2 = Ob1; コピーコンストラクタと代入演算子の詳細な違

  2. C++でコンストラクタをコピーする

    コピーコンストラクターはコンストラクターの一種です。オブジェクトを作成し、同じクラスのオブジェクトで初期化します。コピーコンストラクターがクラスで定義されていない場合は、コンパイラー自体が定義します。コピーコンストラクタは、ポインタ変数または動的メモリ割り当てを持つクラスの必須事項です。 コピーコンストラクタを示すプログラムは次のとおりです。 例 #include<iostream> using namespace std; class Demo {    private:    int num1, num2;    p