OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

メンバ関数のオーバーロード

  • 困ってます
  • 質問No.211609
  • 閲覧数47
  • ありがとう数3
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 58% (109/185)

#include <iostream>
using namespace std;

class Point{
private:
int x;
int y;
public:
Point(int a=0, int b=0){x=a; y=b;}
Point operator+(Point p);
};

Point Point::operator+(Point p)
{
Point tmp;
tmp.x = x + p.x; //この部分   
tmp.y = y + p.y;
return tmp;
}

int main()
{
Point p1(1, 2);
Point P2(3, 6);
p1 = p1 + p2;
}
-------------
のtmp.x = x + p.x;がなぜこうなるのか解りません。

p1 + p2;をするための前処理?なのは解るのですが。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2
レベル12

ベストアンサー率 75% (398/526)

p1 + p2 が、p1.operator+(p2) として実行されるのは、sssoheiさんの言う通りです。
この時 Point::operator+ 関数には、p1 のアドレスが暗黙に渡され、自動的に用意された this という名のポインタ変数に格納されます。そして p2 の値は仮引数の Point p に渡されます。
関数内にメンバ名だけで存在する x や y は、この thisポインタを暗黙に使って参照されます。

つまり実際には、次のような処理をしているのです。(あくまでイメージです。)

Point operator_plus(Point *this, Point p) {
  Point tmp;
  tmp.x = this->x + p.x;  /* p1のxメンバとp2のxメンバを足す */
  tmp.y = this->y + p.y;  /* p1のyメンバとp2のyメンバを足す */
  return tmp;
}
  :
p1 = operator_plus(&p1, p2);

結局それぞれのメンバ同士の足し算を行うわけですが、足し算結果は Point型でなければならないので、tmp という一時的に結果を格納する変数を作って、それを戻値として返すわけです。

質問されていることと違いましたら、補足をお願いします。
お礼コメント
yosiyosi

お礼率 58% (109/185)

理解できました。ありがとうございました。
投稿日時 - 2002-02-07 19:37:13
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル9

ベストアンサー率 33% (33/98)

「メンバ関数のオーバーロード」ではなく「演算子のオーバーロード」じゃないでしょうか^^; たしか「p1 = p1 + p2;」というのは「p1 = p1.operator+(p2);」と言うように計算はずです。つまり、コンパイラが演算子を関数に読み替えているわけです。 # ちょっと怪しいです…^^; そのようになっていることで、スムーズに問題が解決出来るわけです。 # 「p1 = p1 + p ...続きを読む
「メンバ関数のオーバーロード」ではなく「演算子のオーバーロード」じゃないでしょうか^^;

たしか「p1 = p1 + p2;」というのは「p1 = p1.operator+(p2);」と言うように計算はずです。つまり、コンパイラが演算子を関数に読み替えているわけです。
# ちょっと怪しいです…^^;
そのようになっていることで、スムーズに問題が解決出来るわけです。
# 「p1 = p1 + p2 + p3;」であれば「p1 = p1.operator+(p2.operator+(p3));」という感じに

あと「return tmp;」というのは「tmp」のコピーを返しています。この様に、直接書き換えないのは「p1 = p2 + p3;」の様な時を考えてみてください。納得出来なかったら補足をお願いします。

EffectiveC++という良書(と評判です。私もそう思います)がありますので、良ければ読んでみてください。
# この項目は扱われていませんのであしからず^^;
お礼コメント
yosiyosi

お礼率 58% (109/185)

ありがとうございました。本読んで見ます。
投稿日時 - 2002-02-07 19:38:39


このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ