問題タブ [initialization-list]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C ++:継承されたフィールドの初期化
派生クラスのコンストラクターで継承されたメンバーの初期化について質問があります。コード例:
このコードは私に次の出力を与えます:
In constructor 'B::B()':
Line 10: error: class 'B' does not have any field named 'm_int'
(http://codepad.org/tn1weFFPを参照)
なぜこれが起こるのか推測していますか?m_int
のメンバーである必要があり、 inの初期化が発生したときにB
親クラスA
がすでに初期化されている必要があります(親コンストラクターは継承されたクラスのメンバー初期化の前に実行されるため)。私の推論の間違いはどこにありますか?このコードで実際に何が起こっているのでしょうか?m_int
B
EDIT
:このメンバーを初期化する他の可能性(ベースコンストラクターまたは派生コンストラクターの割り当て)を知っていますが、それを試す方法でなぜ違法なのかを理解したいのですが?いくつかの特定のC++言語機能など?可能であれば、C++標準の段落を教えてください。
c++ - C++の子c-tor内からスーパークラスのパラメータを初期化するにはどうすればよいですか?
次の例を見てください。
明らかに、「b」が作成されるとき、B のパラメータが初期化される前に A の ctor が呼び出されます。
このルールにより、クラスの初期化を簡素化する「ラッパー」クラスを作成できなくなります。
それを行うための「正しい方法」は何ですか?
ありがとう、アミール
PS: 私の特定のケースでは、パラメーターはプリミティブではありません。この例は、自分自身を説明するのに役立ちました。
c++ - 'this'オブジェクトを初期化リストに渡します
問題を次のサンプルコードに減らしました。
パブリックメンバーを変更または追加せずに、トレーナーのコンストラクターを作成するにはどうすればよいですか。初期化リストにmyPokemonが作成されると、「myTrainer」は作成中のトレーナーを指すようになります。
これが私が試したことです:
しかしもちろん、「これ」は正しいタイプではありません。Charizardコンストラクターが取り込むもの(パブリックメンバー)を変更できないため、どうすればよいかわかりません。何か案は?
注:タイトルには作業が必要な場合があります。
c++ - この特定のケースでは、メンバー初期化子リストを使用することとコンストラクターで値を割り当てることの間に違いはありますか?
内部的に、そして生成されたコードについて、本当に違いがあります:
と
ありがとう...
c++ - C++のメンバーベースのイディオム
次のコードはここからです:
コメントがよくわかりませんでした。「bufはstd::ostreamの前に初期化できない」のはなぜですか?これを理解するのに役立つことはありますか?
c++ - C++で継承されたテンプレートクラスと初期化リスト
一部の数学クラスをテンプレートに変換し、初期化リストを使用してきましたが、継承されたクラスが初期化時に基本クラスのデータメンバーにアクセスする必要がある場合に問題が発生します。
コードは次のとおりです。
継承されたクラスで初期化リストを使用することは可能ですか?
c++ - 初期化リストの後の中括弧
初期化リストの後の中括弧をスキップできる構文はありますか? 些細なことだとはわかっていますが、コードをできるだけ簡潔にしたいと考えています。
c++ - C++ 初期化リスト - わかりません
効果的な C++ では、初期化リスト内のデータ要素を宣言の順序でリストする必要があると言われています。さらに、この理由は、データ要素のデストラクタがコンストラクタの逆の順序で呼び出されるためであると言われています。
しかし、これがどのように問題になるのかわかりません...
c++ - 2 次元配列の初期化はどのように機能しますか?
小さなC++の例で以下に示すコードに出くわしました:
次に、クラスのコンストラクターで:
ここで、ParallelMultiply はクラス、mat1、mat2、result_mat は 2 次元配列、ARRAY_SIZE は定義された配列の長さです。しかし、どうすれば arr1、arr2、arr3 を 2 次元配列で初期化できますか?? 説明してください。
ありがとうございました!!
c++ - なぜC++初期化リストがブレースの前にあるのですか?
次の2つのクラスの違いを知りたいです。
例 1:
例 2:
例 1 が渡され、最後の例が間違っているのはなぜですか? ありがとう