c++ クラスの基礎(?)

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
基礎無いマン

c++ クラスの基礎(?)

#1

投稿記事 by 基礎無いマン » 6年前

クラスの基礎について教えていただきたいです。

具体的に聞きたいことは、*を付けるときと付けないときでの.と->の差について知りたいです。

もう一つあって、newが必要なときとそうで無いときの差も教えていただけたら幸いです。
参考書のコードを見るとするときとそうで無いときがあって、「何かをするにはnewが必要なときとがあるんだなぁ」くらいの理解度です。

ぬるぽ吐いたら付けたり、取り敢えずnewしておくなどで動く状態を維持することは出来るかもしれませんが、 綺麗なコード作りも意識したいと考えているので、最低限は理解しておきたいと考えています。

どうぞよろしくお願いします。

Math

Re: c++ クラスの基礎(?)

#2

投稿記事 by Math » 6年前

>*を付けるときと付けないときでの.と->の差について知りたいです。
*を付けるとき->で付けないとき.です。
>もう一つあって、newが必要なときとそうで無いときの差も教えていただけたら幸いです。
newを使って作成するのはC言語のmalloc等と同じで、意図的にdeleteするまでオブジェクトは存在し続けます。使わないと同一スコープ内でしかそのオブジェクトを使えません。
>ぬるぽ吐いたら付けたり、取り敢えずnewしておくなどで動く状態を維持することは出来るかもしれませんが、 綺麗なコード作りも意識したいと考えているので、最低限は理解しておきたいと考えています。
綺麗なコード作りは”動くプログラムを書きまくって”失敗をしまくった後に考えても遅くないと思います。プログラムのエキスパートは全ての失敗を経験した人ではないでしょうか。

アバター
purin52002
記事: 235
登録日時: 7年前
連絡を取る:

Re: c++ クラスの基礎(?)

#3

投稿記事 by purin52002 » 6年前

こんにちは

.(ドット演算子)と->(アロー演算子)の差は基本的にはありません。

コード:

class A
{
public:
    A():a(0) {}
    int a;
};

A obj ;
A *obj_p =new A();

int val1 = obj.a;
int val2 = obj_p->a;
int val3 = (*obj_p).a;
上記のコードではval1~3の値は等しくなります。(多分なるはずです^^;)
クラスのメンバにアクセスするときは.(ドット演算子)、クラスのポインタのメンバにアクセスするときは->(アロー演算子)を使います。
*(アスタリスク演算子?)を使って無理やりドット演算子でアクセスすることもできますが
私は素直にアロー演算子を使うほうが好きです^^
(見やすいし、ポインタっていうことがわかるから)

newが必要な場面は継承クラスを扱うときでしょうかね。
基底クラスのポインタに継承クラスのポインタを入れたり、、、
他の場面ではあまりnewは使わないですね(個人的な意見です^^;)
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: c++ クラスの基礎(?)

#4

投稿記事 by みけCAT » 6年前

purin52002 さんが書きました:上記のコードではval1~3の値は等しくなります。(多分なるはずです^^;)
確かにクラスAのメンバaはデフォルトコンストラクタで同じ値に初期化されるのでそれをそのまま代入した変数は等しくはなりますが、
obj_pに代入したnew A()で作成したオブジェクトはobjではないので、objへの変更はobj_pが指すオブジェクトには反映されないし、
obj_pが指すオブジェクトへの変更はobjには反映されません。
obj_p->aと(*obj_p).aは(この場合オーバーロードされていないので)同じ意味になるはずです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

基礎無いマン

Re: c++ クラスの基礎(?)

#5

投稿記事 by 基礎無いマン » 6年前

C言語のことはわかりませんが、newは同スコープ外で使いたいときに使用すればいいのだということがわかりました。

'.'と'->'の違いはほとんどないということで、私もなんとなくポインタのイメージが強い'->'を使おうと思います。

みなさまありがとうございました。

返信

“C言語何でも質問掲示板” へ戻る