回答編集履歴

5

追記

2020/08/06 22:26

投稿

退会済みユーザー
test CHANGED
@@ -257,3 +257,23 @@
257
257
  ```
258
258
 
259
259
  見当違いな回答でしたら申し訳ございません。
260
+
261
+
262
+
263
+ 追記
264
+
265
+ ---
266
+
267
+ friendはオブジェクト指向の三大要素の内の一つ
268
+
269
+ カプセル化に反する機能です。
270
+
271
+ やむを得ない事情がない限り
272
+
273
+ 好き好んで使わないほうが良いかと思われます。
274
+
275
+ もし頭の中にfriendが浮かんだのなら
276
+
277
+ ゲッターで解決できないか考えてみては
278
+
279
+ いかがでしょうか。

4

誤記修正

2020/08/06 22:26

投稿

退会済みユーザー
test CHANGED
@@ -94,7 +94,7 @@
94
94
 
95
95
  public:
96
96
 
97
- XYZ(const double x, const double y, const double z):x_(x_),y_(y),z_(z){}
97
+ XYZ(const double x, const double y, const double z):x_(x),y_(y),z_(z){}
98
98
 
99
99
 
100
100
 

3

細かな点修正

2020/08/06 22:05

投稿

退会済みユーザー
test CHANGED
@@ -74,35 +74,37 @@
74
74
 
75
75
 
76
76
 
77
- //XYZクラスで使用する定数
78
-
79
- constexpr unsigned int X = 0;
80
-
81
- constexpr unsigned int Y = 1;
82
-
83
- constexpr unsigned int Z = 2;
84
-
85
-
86
-
87
77
  class XYZ{
88
78
 
89
- double x, y, z;
79
+ double x_, y_, z_;
90
80
 
91
81
 
92
82
 
93
83
  public:
94
84
 
85
+ //XYZクラスで使用する定数
86
+
87
+ static constexpr unsigned int X = 0;
88
+
89
+ static constexpr unsigned int Y = 1;
90
+
91
+ static constexpr unsigned int Z = 2;
92
+
93
+
94
+
95
+ public:
96
+
95
- XYZ(const double x_arg, const double y_arg, const double z_arg):x(x_arg),y(y_arg),z(z_arg){}
97
+ XYZ(const double x, const double y, const double z):x_(x_),y_(y),z_(z){}
96
-
97
-
98
-
98
+
99
+
100
+
99
- void add(const double x_arg, const double y_arg, const double z_arg){
101
+ void add(const double x, const double y, const double z){
100
-
102
+
101
- this->x += x_arg;
103
+ this->x_ += x;
102
-
104
+
103
- this->y += y_arg;
105
+ this->y_ += y;
104
-
106
+
105
- this->z += z_arg;
107
+ this->z_ += z;
106
108
 
107
109
  }
108
110
 
@@ -112,7 +114,7 @@
112
114
 
113
115
  assert(index<=Z);// 今回のように定数で処理を切り替えたいのならassertで入力制限設けたほうが良いかと思われます。
114
116
 
115
- return index==X ? this->x : index==Y ? this->y : this->z;
117
+ return index==X ? this->x_ : index==Y ? this->y_ : this->z_;
116
118
 
117
119
  }
118
120
 
@@ -136,11 +138,11 @@
136
138
 
137
139
  XYZ& f6(XYZ& xyz){
138
140
 
139
- xyz.getRef(X) += 1;
141
+ xyz.getRef(XYZ::X) += 1;
140
-
142
+
141
- xyz.getRef(Y) += 1;
143
+ xyz.getRef(XYZ::Y) += 1;
142
-
144
+
143
- xyz.getRef(Z) += 1;
145
+ xyz.getRef(XYZ::Z) += 1;
144
146
 
145
147
  return xyz;
146
148
 
@@ -148,9 +150,9 @@
148
150
 
149
151
 
150
152
 
151
- double sum(XYZ& xyz){return xyz.getRef(X) + xyz.getRef(Y) + xyz.getRef(Z);}// 注意点:XYZにはメンバ変数の参照を返すゲッターがあるのでfriend化不要
153
+ double sum(XYZ& xyz){return xyz.getRef(XYZ::X) + xyz.getRef(XYZ::Y) + xyz.getRef(XYZ::Z);}// 注意点:XYZにはメンバ変数の参照を返すゲッターがあるのでfriend化不要
152
-
154
+
153
- double f7(XYZ& xyz){return xyz.getRef(X) * xyz.getRef(Y) * xyz.getRef(Z);}
155
+ double f7(XYZ& xyz){return xyz.getRef(XYZ::X) * xyz.getRef(XYZ::Y) * xyz.getRef(XYZ::Z);}
154
156
 
155
157
 
156
158
 
@@ -220,19 +222,19 @@
220
222
 
221
223
 
222
224
 
223
- std::cout << xyz.getRef(X) << "\n";
225
+ std::cout << xyz.getRef(XYZ::X) << "\n";
224
-
226
+
225
- std::cout << xyz.getRef(Y) << "\n";
227
+ std::cout << xyz.getRef(XYZ::Y) << "\n";
226
-
228
+
227
- std::cout << xyz.getRef(Z) << "\n";
229
+ std::cout << xyz.getRef(XYZ::Z) << "\n";
228
-
229
-
230
-
230
+
231
+
232
+
231
- xyz.getRef(X) = 1;
233
+ xyz.getRef(XYZ::X) = 1;
232
-
234
+
233
- xyz.getRef(Y) = 2;
235
+ xyz.getRef(XYZ::Y) = 2;
234
-
236
+
235
- xyz.getRef(Z) = 3;
237
+ xyz.getRef(XYZ::Z) = 3;
236
238
 
237
239
  f6(xyz);
238
240
 
@@ -240,7 +242,7 @@
240
242
 
241
243
  f6(f6(f6(xyz)));
242
244
 
243
- std::cout << xyz.getRef(X) + xyz.getRef(Y) + xyz.getRef(Z) << "\n"; // (3), sum(xyz) と同値である.
245
+ std::cout << xyz.getRef(XYZ::X) + xyz.getRef(XYZ::Y) + xyz.getRef(XYZ::Z) << "\n"; // (3), sum(xyz) と同値である.
244
246
 
245
247
  std::cout << f7(xyz) << "\n";
246
248
 
@@ -252,8 +254,6 @@
252
254
 
253
255
 
254
256
 
255
-
256
-
257
257
  ```
258
258
 
259
259
  見当違いな回答でしたら申し訳ございません。

2

変数名に不備あり

2020/08/06 22:02

投稿

退会済みユーザー
test CHANGED
@@ -108,11 +108,11 @@
108
108
 
109
109
 
110
110
 
111
- double& getRef(const unsigned int i){
111
+ double& getRef(const unsigned int index){
112
-
112
+
113
- assert(i<=Z);// 今回のように定数で処理を切り替えたいのならassertで入力制限設けたほうが良いかと思われます。
113
+ assert(index<=Z);// 今回のように定数で処理を切り替えたいのならassertで入力制限設けたほうが良いかと思われます。
114
-
114
+
115
- return i==X ? this->x : i==Y ? this->y : this->z;
115
+ return index==X ? this->x : index==Y ? this->y : this->z;
116
116
 
117
117
  }
118
118
 

1

誤字

2020/08/06 21:56

投稿

退会済みユーザー
test CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
  - using namespace std;を使っている。
16
16
 
17
- - メンバにアクセスする際(*this).メンバという方法をっている。(this->メンバ でよい)
17
+ - メンバにアクセスする際(*this).メンバという方法をっている。(this->メンバ でよい)
18
18
 
19
19
  - 引数の変数名が分かりづらい。
20
20