- ベストアンサー
構造体の要素すべてに対する四則演算の方法を教えてください.
構造体の要素すべてに対する四則演算の方法を教えてください. たとえば、 2点a,bの座標成分x,y,zをそれぞれの座標ごとに足す方法を教えてください. 下のようにx,y,z成分を持ったa,bがあります。 struct point{ int x; int y; int z; }; struct point a; struct point b; struct point c; この場合, c=a+b; と書くことができず, それぞれの成分ごとに以下のように足さなくてはなりません. c.x=a.x+b.x; c.y=a.y+b.y; c.z=a.z+b.z; この方法でできるのですが, 非常に効率的でないのでなにかもっと簡単に記述する方法を教えてください. お願いいたします.
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
久しくCは触ってないのですが、 >c=a+b; >と書くことができず, >それぞれの成分ごとに以下のように足さなくてはなりません. >c.x=a.x+b.x; >c.y=a.y+b.y; >c.z=a.z+b.z; この書き方が正しいです。 構造体の内容が同じInt型ならば、配列で宣言しておいた方が 後の手間は簡単そうです。 この記述をいちいち書くのが面倒ならば、この部分を関数化しておけば、 この処理を呼び出す際の記述は1行で済みます。 (プロの仕事のやり方というのは、そーいうもんです)
その他の回答 (4)
- kokucho81
- ベストアンサー率61% (157/255)
2項演算子を再定義しなおせばできます。 struct point operator+(const point& m, const point& n) { point p; p.x=m.x+n.x; p.y=m.y+n.y; p.z=m.z+n.z; return p; } これで、c=a+bとった具合に「+」で演算できるようになりました。 マイナスも同様です。 struct point operator-(const point& m, const point& n) { point p; p.x=m.x-n.x; p.y=m.y-n.y; p.z=m.z-n.z; return p; } その他も同様です。 2項演算子の再定義は、「見た目」の可読性をアップさせるための機能であり、 今回のようなケースで、常識的手法として必ずと言って良いほど使用されます。 覚えておくと良いでしょう。
- miya_777
- ベストアンサー率31% (44/140)
そういう文法はありませんのでできません。 マクロ化や関数化するしかありません。
C言語ですね? 関数で struct point pointsum(struct point *a, struct point *b) { struct point result; result.x = a->x + b=>x; result.y = a->y + b=>y; result.z = a->z + b=>z; return(result); } c = a + b ;がしたいのであれば、 c = pointsum( a, b ); とやるのが一般的ですよ。 でも実は自信がないので(笑)アドバイスということで。
お礼
お早い回答ありがとうございます. 今,実際には関数を作ってそれをつかってます。 でも、足す個数が二つになったり,3つになったり,めちゃめちゃたくさんあったりして,実際にはいろんな場合があって関数をすべてに適応させるのが大変なんですよね. 結局配列でやるのが初心者の僕としてはいいかもしれません.
- ranx
- ベストアンサー率24% (357/1463)
言語はCですか?だとしたら、 void plus(struct point *p1, struct point *p2, struct point *p3) { p3->x = p1->x + p2->x; p3->y = p1->y + p2->y; p3->z = p1->z + p2->z; } というような関数を作っておいて plus(&a,&b,&c); としてやるのが普通でしょう。 C++ならもう少しエレガントにできますけどね。
お礼
お早い回答ありがとうございます. 今,実際には関数を作ってそれをつかってます。 でも、足す個数が二つになったり,3つになったり,めちゃめちゃたくさんあったりして,実際にはいろんな場合があって関数をすべてに適応させるのが大変なんですよね. 結局配列でやるのが初心者の僕としてはいいかもしれません.
お礼
お早い回答ありがとうございます. やっぱり、配列で書いた方がいいですよね。 最近、構造体を使うようになったので、 ちょっと構造体にこだわりたかったです。 でも、おっしゃる通り配列にするのがいちばん簡単なんですよね. ありがとうございました.