2016-10-29 6 views
2

私はC++(javaプログラマー)には新しく、イントロコースの宿題に取り組んでいます。目的は「コンストラクタ、動的メモリ割り当て、 オペレータのオーバーロード」です。実際、私は実際の仕様の1つに固執しています。C++ dvcでポインタへのポインタを入れる方法

私は2つのクラスのColorとColorBoxを作成しています。命令では、ColorBoxのメンバ変数がint width、int heightおよびColor ** dataであることが指定されています。私の理解では、データは2DオブジェクトのColorオブジェクトへの参照を保持しています。

私の質問はDVCのデータに何らかのタイプの空または基本値を設定するにはどうすればよいですか?そして、誰かがこの種のポインタについて上手く書くためのリンクを持っていますか?私は配列とポインタの一般的な書き込みアップを見つけましたが、私はまだこの問題を回避するのに問題があります。

ありがとうございます!

編集: 私はそれを以下のコードで動作させると思っていますが、私はまだ私が何をしているのか分からないと思います。

ColorBlock::ColorBlock() 
{ 
    this->width = 0; 
    this->height = 0; 
    Color temp_data[1][1]; 
    this->data = (Color**)temp_data; 
} 
+0

ここで「DVC」とは何ですか? – Dai

+0

デフォルト値コンストラクタ – SMI

+0

Ecxellent。私はDamme Van Claude-JeanであなたがJをどのように失ったのだろうと思っていました。 – user4581301

答えて

2

空または基本値を言うときは、変数を安全なデフォルト状態に初期化することを意味します。その場合、あなたが提示したコードはいくらか正しいものですが、いくつかの作業を使用することができます。起動するには

、あなたは以下の

ColorBlock::ColorBlock() 
{ 
    this->width = 0; 
    this->height = 0; 
    this->data = nullptr; 
} 

のようなあなたのコンストラクタを書き換えることができ、ここで最も重要な変更は、そのデータは、もはやあなたが作成したジャンクデータへのポイントではありません。これは、コンストラクタが終了すると、指し示されたメモリはもはや有効なメモリではなくなりますが、それが迷惑メモリであるかどうかを確認するのが困難になるため、これは重要です。 nullptrは、有効なメモリ位置を指すことができない(ポインタが何も指していないことを示すために使用される)安全な値へのポインタを初期化するC++ 11の方法であり、タイプセーフでもあります。

[C++ 11の前にCとC++の規格では、我々はあなたがここにチェックnullptr使用すべき理由の詳細については、NULLへのポインタを初期化します:What are the advantages of using nullptr?]

に注意することがもう一つは、stargateurにより下記のようにCタイプのキャストを使用したことです。このキャストはreinterpret_cast、const_cast、およびstatic_castを組み合わせているため強力ですが、まったく同じ理由で安全ではありません。ここではおそらくreiniterpret_castが必要だったでしょう。

しかし、このデータを初期化するもう一つの「もっとC++」の方法があります。
Why should I prefer to use member initialization list?

P.S.:あなたは/ /以下を参照してください。このスタイルを使用することができなければならないだろう理由の詳細について

ColorBlock::ColorBlock() : //Note the colon here 
    width(0), height(0), data(nullptr) 
{ } 

これは、私のフォーマットや説明をより簡潔にするために改善することができれば、このサイトを通して誰かを助けることに対する私の最初の試みです。私が間違えた場合は、それも指摘してください。

EDIT:提案された変更を追加しようとしました。

+0

この場合、 'this-> data =(Color **)temp_data; 'を実行するのがなぜ安全でないのかを追加してください。 1つのキャストはCのようなもので、2つはなぜ関数の最後にtemp_dataがデイトロイになるのかです。 – Stargateur

関連する問題