• ベストアンサー

-> と . の違いについて

クラスを宣言し、メンバ関数を呼ぶ際に使われるのは分かりますが それぞれの違いについてわかりません。 どのように違い、利用時はどちらを使用するかを教えて頂けませんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • koi1234
  • ベストアンサー率53% (1866/3459)
回答No.1

そのクラスなり構造体がアドレスで渡されているなら->を使い 実態そのものが渡されているなら . を使います 大雑把な例 struct Test { int a; int b; int c; }; void Samplecode(void) { Test  test1; Test  *test2; test2 = &test1; test1.a = 5;   //5代入 test2->a = 5; //上と同じ } コードは全角入ってる場合ありコンパイルテストなどはしてません

7u7
質問者

お礼

koi1234様、ご返答ありがとうございます。 なるほど!分かりやすい例です! ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

呼び出したいクラスの変数がポインタ変数か実インスタンスかの違いです. class A; A a; A *pa; pa = &a; みたいなコードがあった場合,メソッドを呼び出すときは, a.method(); pa->method(); としなければなりません.上記の2行の実行結果の差はありませんが,プログラムの構造によってどちらが適当か選んで使用します.

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 「クラス関数」「メンバ関数」「メソッド」の違いを教えてください。

    「クラス関数」「メンバ関数」「メソッド」の違いを教えてください。 あるサイトに、「クラス関数」=「メンバ関数」と書かれていました。 「メンバ関数」=「メソッド」だと思っているのですが、 そうすると、「クラス関数」=「メンバ関数」=「メソッド」という認識で間違いないでしょうか?

    • ベストアンサー
    • PHP
  • クラスの宣言でのメモリ使用サイズの違い

    お世話になります。 現在、Visual Studio 2005にてMFCのC++のプログラムを作成しているのですが、そこでメモリの使用容量について疑問に感じた点があったのでこちらで、質問させて頂きました。 お聞きしたい内容は あるクラス1内で別のクラス2を宣言する際に、メンバ変数としてそのクラス2を宣言し、クラス1のコンストラクタでnewでメモリを確保し、デスクリタでdeleteする方法と、その都度クラス2の変数または関数が必要なときにnewでメモリを確保して、deleteで開放する方法とでは、メモリの確保等で違いがなにかありますでしょうか? また、クラス2をクラス1,クラス3で使用する場合には、クラス1,クラス3でそれぞれクラス2のオブジェクトを宣言するのと、クラス1でクラス2のオブジェクトを宣言し、そのオブジェクトをクラス3でexternするのではどちらの方がメモリの使用等からよい方法なのでしょうか? 今までほとんどメモリを気にせずにプログラムを作っていた為、メモリの使用の点ではほとんど無知な為、変な質問なのかもしれませんが、ご存知の方がいらっしゃいましたら、ご回答をお願い致します。 開発環境は Widows CE 6.0 Visual Studio 2005 です。

  • 「static宣言されているメンバ関数」は、「インスタンスメソッド」な

    「static宣言されているメンバ関数」は、「インスタンスメソッド」なのでしょうか? それとも、「クラスメソッド」なのでしょうか? 先日、下記内容で質問して、その時は分かったつもりだったのですが、 やっぱり分かってなかったようなので、教えてください。 ▽「クラス関数」「メンバ関数」「メソッド」の違いを教えてください。   http://okwave.jp/qa/q5858806.html 例) ▽前提 ・Aクラスのインスタンスa ・static宣言されたpublicメソッド「static_public_method」 ・static宣言されていないpublicメソッド「public_method」 ▽メンバ関数呼び出し ・$a->static_public_method() ・A::static_public_method() ・A::public_method() このとき、「$a->static_public_method()」は、インスタンス経由でアクセスすることになるので、 「インスタンスメソッド」になるのでしょうか。それとも、static(静的)宣言しているので、「クラスメソッド」になるのでしょうか? また、「A::static_public_method()」や、「A::public_method()」は、どちらになるのでしょうか? ※現在、頭の中がこんがらがっているのは、下記3点です。どれかひとつでも構わないので、分かりやすい考え方等あれば、ぜひ教えてください。 ・「static宣言したメンバ関数」は、「インスタンスメソッド」? 「クラスメソッド」? ・「スタティック」宣言してるのに、メンバ関数へ、「->(アロー演算子)」(オブジェクト経由)でアクセスできる理由 ・「A::static_public_method()」と「A::public_method()」の違い

    • ベストアンサー
    • PHP
  • クラスのスコープ範囲

    再度お世話になります。 C++のクラスについての質問ですが、 別ファイル(別のDLL)に定義されているメンバ関数を利用したいのですが、 どのように外部宣言すればよろしいのでしょうか。 どうぞ宜しくお願いします。 例) A.dll あるクラス内に格納されている値を取得する為に、 Get_XXXというメンバ関数が定義されている。 B.dll こちらからその値をそのメンバ関数を利用して取得する。

  • クラスのメンバ関数を別ファイルで定義したときのバグ

    C++ においてヘッダファイルで宣言したクラスのメンバ関数を別のソースファイルで定義して、コンパイルするとうまくいきません。エラーは出ないのですが、同名の何もしない関数としてコンパイルされているようなのです。クラスのメンバ関数を宣言したのと同じヘッダに書くとちゃんとコンパイルされます。 どうしてそうなるのか、いまいち原因がわかりません。

  • 変数の宣言方法の相違によるエラー

    ある変数を関数内で宣言した場合、デバック時に「ハンドルされていない例外が発生しました」っていうエラーになります。でも、グローバル変数として宣言した場合には、同じエラーが発生しませんでした。今回の場合、配列を10,000,000ぐらい確保しようとしたので、メモリ領域を確保できなかったが、エラーの発生原因だと思います。メンバ変数とグローバル変数で確保できるメモリ領域にどれくらいの違いがありますか。その他にクラスのメンバ変数として宣言した場合とグローバル変数として宣言した場合でどのような違いがありますか。 わかる方が教えてください。よろしくお願いします。

  • ソースファイルの分割について

    a.h クラスの定義 a.cpp クラスのメンバ関数の定義 b.h #include "a.h" クラスの定義 b.cpp クラスのメンバ関数の定義 ----c.cpp---- #include "a.h" #include "b.h" a.hで定義したクラスの宣言 b.hで定義したクラスの宣言 メインの処理 ----------------------------------------- b.cppで定義しているクラスのメンバ関数にて a.cppで定義したクラスのメンバ変数にアクセスしたいのです。 どうするのが一番良いのでしょうか? a.cppにメンバ変数を返すだけの関数を定義してb.cppでc.cppで宣言したa.hのクラスを extern宣言してみたのですがエラーが出てコンパイルが通らないです。

  • FriendとPublicの違い。。。

    こんにちは。 関数などを宣言する時のFriendとPublicの違いって何ですか? どちらも、他のモジュールからでもアクセスできるという事ですよね?! 違いが分かる方教えてください!! 宜しくお願いします。

  • クラスについての質問

    私はゲームを作っています。作り始めのころクラスの存在を知らずに めちゃくちゃに組んでいたのですが、最近になってクラスを使わないと 不便だという事に気が付きました。現在クラスを使用して修正中です。 クラスについて調べている時に、クラスの中のメンバの値を変える時は そのクラスの中でしか変えてはいけない、ととあるサイトで見かけました。 更にクラスのメンバはなるべくpublicで宣言してはいけないとも見かけました。 そこで気になったのですが、クラスの中のメンバの値をクラス外の 変数やクラスのメンバ等に代入したい時はどのようにすれば良いのでしょうか? クラス外でメンバを参照するにはpublicで宣言しなければなりませんし、 クラス内に変数をアドレスで引き渡して代入してしまうと、クラス内でしか 値を変えてはいけないということを守れなくなってしまいます。 このような場合はどのようにして値を代入すれば良いのでしょうか? 返答をお願いします!。

  • listの maxsize()と size()の違いは・・・

    listクラスのmaxsize()メンバとsize()メンバの違いは vectorクラスのcapacity()メンバとsize()メンバの違いと思っていいのでしょうか?