回答編集履歴
3
返信
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
返信
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
文章の追加
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
|
+
( 複数個あってもいいが、完全に独立しているから今回は不向き。 )
|