回答編集履歴

3

返信

2017/12/28 02:21

投稿

BeatStar
BeatStar

スコア4958

test CHANGED
@@ -279,3 +279,57 @@
279
279
 
280
280
 
281
281
  ( 私が馬鹿なだけかもしれないが。 )
282
+
283
+
284
+
285
+ ----------------------------------------------
286
+
287
+ [ 返信3 ]
288
+
289
+
290
+
291
+ 例えば、上記のPlayerManager クラスがあるとして、
292
+
293
+
294
+
295
+ ```C++
296
+
297
+ void func( PlayerManager *manager ){
298
+
299
+ Player player; // プレイヤーを生成 ( 本来は引数が必要だと思うが、例なので省略 )
300
+
301
+ manger->add( player );
302
+
303
+ }
304
+
305
+
306
+
307
+ ```
308
+
309
+
310
+
311
+ みたいにしておけば、
312
+
313
+
314
+
315
+ ```C++
316
+
317
+ // main関数内
318
+
319
+ PlayerManager manager; // これも本当は引数が必要だろうけど、例なので省略。
320
+
321
+ func( &manager );
322
+
323
+ ```
324
+
325
+
326
+
327
+ みたいに管理者を渡せばOkだと思う。
328
+
329
+
330
+
331
+ オブジェクト指向だからって、複雑に捉えすぎると意味がわからなくなり、余計アレになる。
332
+
333
+
334
+
335
+ 関係性をUMLとかで洗い出して考えてみては?

2

返信

2017/12/28 02:21

投稿

BeatStar
BeatStar

スコア4958

test CHANGED
@@ -191,3 +191,91 @@
191
191
 
192
192
 
193
193
  ( 複数個あってもいいが、完全に独立しているから今回は不向き。 )
194
+
195
+
196
+
197
+ -------------------------------------------------------
198
+
199
+
200
+
201
+ [ 返信2 ]
202
+
203
+
204
+
205
+ えーと、返信1 で挙がっているmanager をC++で書くと
206
+
207
+
208
+
209
+ ```C++
210
+
211
+ class PlayerManager{
212
+
213
+ public:
214
+
215
+ void add( Player *player ){ players.push_back( player ); }
216
+
217
+ ... // その他メンバ
218
+
219
+ private:
220
+
221
+ List<Player> players;
222
+
223
+ };
224
+
225
+ ```
226
+
227
+
228
+
229
+ みたいに持っていて、管理者として存在します。
230
+
231
+
232
+
233
+ 別にこれはなくてもいいですが、あくまで考え方。
234
+
235
+
236
+
237
+ 返信にある ( 20になった... ) のコードでは
238
+
239
+
240
+
241
+ main関数で player が生成されていますね。
242
+
243
+
244
+
245
+ このplayerオブジェクトが持つので player::x には 20が入っている。
246
+
247
+
248
+
249
+ が、これを別のクラスや関数でさらに生成して使用しても player自体がまったく違う物質になっていますから、もっているデータも違ってくる。
250
+
251
+
252
+
253
+ 同じ"太郎"でも山田太郎と東京太郎では違いますよね。
254
+
255
+
256
+
257
+ それと同じです。
258
+
259
+
260
+
261
+ 最初の質問では、流れを考えるといいと思います。
262
+
263
+
264
+
265
+ まず、
266
+
267
+
268
+
269
+ Playerのほうで生成するとしても、player_dataを生成 -> player_data::Set_Parameterで設定 -> ( Set_Parameterの呼び出し ) -> Player playerが生成される -> Set_Parameterが動く ...
270
+
271
+
272
+
273
+ という感じで考えると、( Player_Data の方の ) Player player とかがわかりにくくなる。
274
+
275
+
276
+
277
+ というか、なぜこういう風に複雑にしたのかが疑問。
278
+
279
+
280
+
281
+ ( 私が馬鹿なだけかもしれないが。 )

1

文章の追加

2017/12/26 06:25

投稿

BeatStar
BeatStar

スコア4958

test CHANGED
@@ -81,3 +81,113 @@
81
81
 
82
82
 
83
83
  勇者用にYushaクラス, Wizardクラス...って少しでも違えばクラスを生成しないといけなくなる。
84
+
85
+
86
+
87
+ ------------------------------------------
88
+
89
+
90
+
91
+ [返信1]
92
+
93
+
94
+
95
+ 変数で考えてみてください。
96
+
97
+
98
+
99
+ ```Java
100
+
101
+ int method1(){
102
+
103
+ int a;
104
+
105
+   a = 100;
106
+
107
+ }
108
+
109
+
110
+
111
+ int method2(){
112
+
113
+ int a;
114
+
115
+ a = 32;
116
+
117
+ }
118
+
119
+
120
+
121
+ ```
122
+
123
+
124
+
125
+ さて、上記の場合、int a はそれぞれ同じものでしょうか?
126
+
127
+
128
+
129
+ 実際には method1はmethod1内にあるint aを, method2は method2内にある int aを参照します。
130
+
131
+
132
+
133
+ よって、別物になります。
134
+
135
+
136
+
137
+ これのオブジェクト版。
138
+
139
+
140
+
141
+ なので、例えばmainメソッド内で、
142
+
143
+
144
+
145
+ ```Java
146
+
147
+ Player player1 = new Player( "player1" );
148
+
149
+ Player enemy1 = new Player( "ememy1" );
150
+
151
+ CharaManager manager = new CharaManager();
152
+
153
+
154
+
155
+ manager.add( palyer1 );
156
+
157
+ manager.add( enemy1 );
158
+
159
+
160
+
161
+ ```
162
+
163
+
164
+
165
+ みたいになると思う。
166
+
167
+
168
+
169
+ この一つのmanagerがListを持っていて、管理する...みたいな。
170
+
171
+
172
+
173
+ あと、基本的にオブジェクト指向の言語はフィールドはprivateです。
174
+
175
+
176
+
177
+ そうじゃないとC言語でいうグローバル変数と同じになってしまいますから。
178
+
179
+
180
+
181
+ で、そのアクセスはアクセサと呼ばれるget/setで。
182
+
183
+
184
+
185
+ C# なら プロパティって呼ばれるもの。
186
+
187
+
188
+
189
+ Listを持つのは一つに限定したほうがいいはず。
190
+
191
+
192
+
193
+ ( 複数個あってもいいが、完全に独立しているから今回は不向き。 )