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

それって演算子の多重定義じゃないんですか?

  • 暇なときにでも
  • 質問No.120084
  • 閲覧数46
  • ありがとう数4
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 44% (44/99)

今日
http://oshiete1.goo.ne.jp/kotaeru.php3?q=119986

で回答しました。
私としては、質問に対する最もまともな回答をしたつもりでしたが、
反応すらなかったので、「あれ? なんか間違ってんのかな?」と
思ったしたいです。

で、普段からC++でプログラム組んでいる人に伺いたいんですが、
これって質問に対する答えとして相当間違った方向なのでしょうか?
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.4
レベル9

ベストアンサー率 40% (43/105)

私のコードの利点は
構造体のメンバを増やしても関数pointplusを変更しなくてもよい
です。
例えば、
struct point{
 union {
  struct {
   int x;
   int y;
   int z;
   int z2;
  };
  int member[4];
 };
};
としても関数pointplusは変更せずに済みます。

それから、以下の2つのパターンですが、
1. pointplus(足し先点、足し元点1、足し元点2)
2. 足し先点 = pplus(足し元点1、足し元点2)
2のパターンだと、復帰値で構造体のメンバのコピーが発生するので、
1のパターンの直接変更の方が無駄がありません。
お礼コメント
kokucho81

お礼率 44% (44/99)

あ、そうかなるほど。。。。

良く考えると、(技法としては一見特殊に見えますが)考え方は至ってしごくまっとうですよね。

メンバーに名前をつけると共に、テーブル化して走査できるようにしてしまう、
こんな手法ってあったんですね。。。(しらんかったですまじで。。。)

うーむ。妙なところで妙な収穫を得ましたです。。。
ありがとうございました。
投稿日時 - 2001-08-18 03:04:36
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.1

読んでみました。 確かに一番無難そうな回答ですね。 ただ、補足やお礼を見てみると、「お早い回答」と 書かれているので、もしかしたらkokucho81様が回答 したのとほぼ同じ時間にお礼を書き込んでいて、 質問者の方は、kokucho81様の回答を読んでいない のではないでしょうか? 書き込んでいる間の時間というのは、表示される ページが更新されないので、結構こういうことは 起こり ...続きを読む
読んでみました。

確かに一番無難そうな回答ですね。
ただ、補足やお礼を見てみると、「お早い回答」と
書かれているので、もしかしたらkokucho81様が回答
したのとほぼ同じ時間にお礼を書き込んでいて、
質問者の方は、kokucho81様の回答を読んでいない
のではないでしょうか?

書き込んでいる間の時間というのは、表示される
ページが更新されないので、結構こういうことは
起こりがちです。

Pointがつかない・・・だから回答しないとならずに、
誰か困っている人のためとこれからもがんばって
回答していれば、質問者の方にも心は伝わると
思いますよ。
#別に回答するのは競争ではないと思いますし・・・
#まぁ、Pointがもらえればうれしいのは確かですが。

ではでは☆
お礼コメント
kokucho81

お礼率 44% (44/99)

Kanata様。
私のわがまま勝手な疑問にアドバイス頂きありがとうございます。

>書き込んでいる間の時間というのは、表示される
>ページが更新されないので、結構こういうことは
>起こりがちです。
そうですね~。もしかしたら質問者の方がお礼をカキカキしている間に、
私がコネコネ回答していたのかもしれないですね~。(はぅ~

とりあえず、回答の方向性としては、それなりに妥当性の有るものでは
あったということが確認できて良かったです。

>Pointがつかない・・・だから回答しないとならずに、
>誰か困っている人のためとこれからもがんばって
いえ、より一層回答の「質」を高めていこうと思いました。
目指すところは、「500回答で5000点」なので。。。

#私の勝手な目標なのですが、そうやって、
#自分なりに目標点立ててやるのもありかなと。。。
#って話それてる。。。(= =;)
投稿日時 - 2001-08-18 00:21:51


  • 回答No.2
レベル10

ベストアンサー率 66% (103/155)

質問者の質問や補足からは「C++」という言葉は一言も 出ていなかったので「C++」ではなく「C」での 質問であると(解答者のみなさんが)判断したんだろうと想像します。 「C++」でという条件がある場合は、演算子のオーバロードのほうがより最適な解答だと、私も思います。 ...続きを読む
質問者の質問や補足からは「C++」という言葉は一言も
出ていなかったので「C++」ではなく「C」での
質問であると(解答者のみなさんが)判断したんだろうと想像します。
「C++」でという条件がある場合は、演算子のオーバロードのほうがより最適な解答だと、私も思います。
お礼コメント
kokucho81

お礼率 44% (44/99)

shuyamakawaさま、アドバイスありがとうございます。

>質問者の質問や補足からは「C++」という言葉は一言も
>出ていなかったので「C++」ではなく「C」での
そうですね。そこは私もおもいました。
少なくとも質問者の方が知っているのはC言語の範囲であろうとは思いました。
と、同時に、環境等々において、何も記述なさってはいなかったので、
#「多分WindowsでVC++かBC++」あたりを使ってC言語勉強中かな~
#「そうでなければ、学校でUNIXのGNU GCC」をつかって勉強中なのだろうか。
、、、うーむ、とすれば、とりあえず(本人はC++使ってないけれど、
多分C++が動く環境だろうから)カット&ペーストで使えるように
回答しとくのが一番かな~。。。

と思ってあんな感じになったのですが、、、撃沈でした。。。

とりあえず、「C++なら妥当」と言って頂いたので、
その点では、安心できました。
投稿日時 - 2001-08-18 00:34:13
  • 回答No.3
レベル9

ベストアンサー率 40% (43/105)

みなさん言うとおりCのみの話でありC++ではないのでしょう。 C++に慣れるとあのコードで普通ですね。 Cのみでも以下のようにすればできると思うんですが、 あっさり締めきられちゃいましたね(笑) struct point{  union {   struct {    int x;    int y;    int z;   };   int member[3];   ...続きを読む
みなさん言うとおりCのみの話でありC++ではないのでしょう。
C++に慣れるとあのコードで普通ですね。

Cのみでも以下のようにすればできると思うんですが、
あっさり締めきられちゃいましたね(笑)

struct point{
 union {
  struct {
   int x;
   int y;
   int z;
  };
  int member[3];
 };
};


void pointplus(struct point *pa, struct point *pp1, struct point *pp2)
{
 int i;
 for (i = sizeof (pa->member) / sizeof (int) - 1; i >= 0; i --)
  pa->member[i] = pp1->member[i] + pp2->member[i];
}
お礼コメント
kokucho81

お礼率 44% (44/99)

mkii さん、アドバイスありがとうございます。

おぉ!? これは? 無名の共用体ですね。。。たしかに、これで
member配列に入れた値が、x,y,zにてアクセスできますが。。。
(ちょっとこれは思いつかなかったです。。。)

しかし、、結局

1. pointplus(足し先点、足し元点1、足し元点2)

という形ですから、

2. 足し先点 = pplus(足し元点1、足し元点2)

と大して変わんない気もするのですが、、、
なんかすごい(記述上などの)利点があるのでしょうか?
(私の勉強不足ですか?)
投稿日時 - 2001-08-18 01:03:24
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

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

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

特集


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

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ