ページ 11

C++ クラスのインスタンス?

Posted: 2017年12月09日(土) 01:44
by いくぞ、55
C++を勉強中です

クラスのインスタンス化(?)の時に

class Hoge; があったとして

コード:

class Huga {
       Hoge  hoge;
       Hoge* hoge = new hoge();

      ~Huga() {
             delete hoge;
       }
};
の2通りの使い分けがわかりません。

「.」と「->」で使うのはわかるのですが、「.」でしか使えない場合(逆も然り)があるのかどうかというところがわからないです。

機械的に「全ての場合でこっちを使えば問題ない」ということであれば非常にわかりやすいのですが…

Re: C++ クラスのインスタンス?

Posted: 2017年12月09日(土) 12:47
by V30

コード:

Hoge  hoge;
は、
hoge->メンバ変数(関数)
のように指定できないし、

コード:

Hoge* hoge = new hoge();
は、
hoge.メンバ変数(関数)
のように指定できません。

コンパイルエラーになります。[VS2017の場合]

必ず、
オブジェクト型「Hoge」は「.」、
ポインター型は「Hoge*」は「->」
を使うようにしましょう。
オフトピック
例外として、
オブジェクト型「Hoge」でも「->」が使える
パターンがありますが[operator->関数]、
その時はその時で質問しましょう。

Re: C++ クラスのインスタンス?

Posted: 2017年12月09日(土) 13:50
by manntera
ポインタだとこんな芸当が出来たりする。

https://qiita.com/Riyaaaa_a/items/887f6190e710c6410994

Re: C++ クラスのインスタンス?

Posted: 2017年12月09日(土) 14:21
by V30
ちょっと質問からズレた返答でした(汗)

どっちの型でもいいんですが、初心者の内は、
なるべく片方だけ使いましょう。
オブジェクト型のほうが安心です。

後々ポインター云々も覚えなきゃいけないので、
ちょっと安全ではないポインター型主体で勉強
してみる手もありです。

取りあえずは全く同じものと考えてもよいので、
悩むことはないと思います。
ご自身のやりやすいほうで、、、

Re: C++ クラスのインスタンス?

Posted: 2017年12月09日(土) 17:54
by いくぞ、55
ありがとうございました!
ポインタはまだよくわかっていないので、「.」を使うほうでやっていきたいと思います