2017-11-05 13 views
0

初期化リストで定義されている値を再定義できない場合があります。私はコピーコンストラクタでこれを再定義したいと思います。私はいくつかのサンプルコードをスローします。また、コピーコンストラクタのforループに入ると、プログラムがクラッシュするという問題も発生しています。野生のものは何でも見てください。 forループをクラッシュさせることなく実行しているようには見えません。 CPPファイル内C++はコピーコンストラクタでリストの割り当てを初期化し、コピーコンストラクタでクラッシュする

class Calculator : public Tool { 
private: 

    int numberKeys; 

    Tool** tools; 

public: 

    Calculator(); 
    Calculator(const Calculator& obj); 

:ヘッダファイル内

Calculator::Calculator() 
:Tool("MyCalculator"), 
numberKeys(0), 
tools(nullptr) 
{ 
} 

Calculator::Calculator(const Calculator& obj) 
{ 

numberKeys=obj.numberKeys; 
tools = new Tool*[numberKeys]; 

*****How do I define  :Tool("MyCalculator"), 
*****to     :Tool("YourCalculator"), 

for (int x = 0; x < numberKeys; x++){ 
    this->tools[x] = (obj.tools[i]->clone()); 

} 

} 

答えて

1

私が正しくあなたの質問を理解していれば、あなたはデフォルトコンストラクタをしたいとする別の文字列を渡すためにCalculatorのコンストラクタをコピーします親(基本)クラス

これを行うには、既定のコンストラクターで使用したのと同じ割り当てリスト形式を使用します。余分ないくつかのコーディングのヒント

Calculator::Calculator(const Calculator& obj) 
: Tool("YourCalculator"), numberKeys(obj.numberKeys) { 
    tools = new Tool*[numberKeys]; 
    for (int i = 0; i < numberKeys; i++) tools[i] = obj.tools[i]->clone(); 
} 

:だから、コピーコンストラクタの定義は次のようになりますメンバ変数をdelcaringとき

  1. 、私はローカル変数からdestinguishするm_または_接頭辞を使用します。このようにして、長時間のコーディングを高速化できるthisの使用を続ける必要はありません。
  2. forループで使用する一時的な証明書に注目してください。int x = 0と宣言し、iがローカルスコープに存在しない場合はobj.tools[i]を使用しました。
  3. //を使用してコードをコメントすることも、/* comment */というコメントブロックを囲むこともできます。 *****はコードをコメントアウトしません。
  4. 可能であれば、メンバー変数をnullptrに初期化しないでください。これは、NULLポインターエラーを引き起こす可能性があるため、後でそれらを操作しようとすると混乱する可能性があります。
+0

ありがとう、非常に役立つ応答! – Busta

関連する問題