2017-08-23 4 views
3

C++でのコード作成を学ぶ一方で、多くの状況で、変数値を与えるようなクラスを宣言するときにコードを実行する必要があります。私はPythonで__init__を使うことができますが、C++でどうすればいいでしょうか?PythonのC++に相当する__init__

+0

それに問題があるとして、あなたの受け入れ答えにコメントを読んで確認してください。 – xaxxon

+0

クラスが宣言されたときに '__init__'は実行されません。そのクラスのインスタンスが作成されるたびに実行されます。 –

+0

それは私が意味するものです。私はちょうど使用する単語が分かりませんでした – LinuxLivesMatter

答えて

4

constructorと呼ばれるC++でのPythonの__init__方法の同等。両方の役割は、使用できるようにクラスのインスタンスを初期化/構築することです。しかし、いくつかの違いがあります。 Pythonで

  • C++でそれらが初期化リストを使用して初期化しなければならないのに対し、データ・メンバーは、__init__内部に初期化されます。

  • デフォルトでコンストラクタは親クラスのデフォルトのコンストラクタにチェーンされていますが、Pythonでは明示的に親を__init__、好ましくはsuper()を呼び出す必要があります。

  • C++では、関数オーバーロードが可能で、コンストラクタにも適用されます。これにより、異なるシグネチャ(引数リスト)を持つ異なるコンストラクタを宣言できます。 Pythonで同じことを行うには、__init__を受け入れるように宣言し、*args,**kwargsを手動でディスパッチする必要があります。

  • C++には、default constructor,copy constructorおよびmove constructorという空間的な種類のコンストラクタがあります。

のPython:

class Foo: 
    def __init__(self, x): 
     self.x = x 
     print "Foo ready" 

C++:

class Foo { 
public: 
    int x; 
    Foo(int x) : x(x) 
    { 
     std::cout << "Foo ready\n"; 
    } 
}; 
-1

これはデフォルトコンストラクタと呼ばれています:

class X { 
public: 
    // only one of the next two lines should be present as the are both default constructors and having both would make it ambiguous which to use 
    X();      // Default constructor with no arguments 
    X(int = 0);    // Default constructor with one default argument 

    X(int, int , int = 0);  // Non-Default Constructor 
}; 
+1

それはちょうど*コンストラクタ*と呼ばれています。必ずしも* default *コンストラクタである必要はありません。 – jamesdlin

+0

デフォルトのコンストラクタはデフォルト値を設定します。 – lciamp

+0

実際にデフォルトのコンストラクタを使用する場合は、有効なコードではないことを指摘することはできません:https://godbolt.org/g/n4ncyo – xaxxon

関連する問題