回答編集履歴

7

typo修正

2021/05/15 17:40

投稿

rinjinto
rinjinto

スコア170

test CHANGED
@@ -132,7 +132,7 @@
132
132
 
133
133
  当たり判定用のコリジョンクラス = obj.当たり判定用のコリジョンクラス;
134
134
 
135
- オブジェクト種別 = obj.オブジェクト種別
135
+ オブジェクト種別 = obj.オブジェクト種別;
136
136
 
137
137
  }
138
138
 
@@ -174,7 +174,7 @@
174
174
 
175
175
  Player()
176
176
 
177
- : Character()
177
+ : Character(),
178
178
 
179
179
  オブジェクト種別 = ePlayer
180
180
 
@@ -200,7 +200,7 @@
200
200
 
201
201
  Enemy()
202
202
 
203
- : Character()
203
+ : Character(),
204
204
 
205
205
  オブジェクト種別 = eEnemy
206
206
 
@@ -226,7 +226,7 @@
226
226
 
227
227
  Box()
228
228
 
229
- : Object()
229
+ : Object(),
230
230
 
231
231
  オブジェクト種別 = eBox
232
232
 

6

誤記修正

2021/05/15 17:40

投稿

rinjinto
rinjinto

スコア170

test CHANGED
@@ -174,7 +174,9 @@
174
174
 
175
175
  Player()
176
176
 
177
+ : Character()
178
+
177
- : オブジェクト種別 = ePlayer
179
+ オブジェクト種別 = ePlayer
178
180
 
179
181
  {}
180
182
 
@@ -198,7 +200,9 @@
198
200
 
199
201
  Enemy()
200
202
 
203
+ : Character()
204
+
201
- : オブジェクト種別 = eEnemy
205
+ オブジェクト種別 = eEnemy
202
206
 
203
207
  {}
204
208
 
@@ -222,7 +226,9 @@
222
226
 
223
227
  Box()
224
228
 
229
+ : Object()
230
+
225
- : オブジェクト種別 = eBox
231
+ オブジェクト種別 = eBox
226
232
 
227
233
  {}
228
234
 

5

誤記修正

2021/05/15 16:18

投稿

rinjinto
rinjinto

スコア170

test CHANGED
@@ -222,7 +222,7 @@
222
222
 
223
223
  Box()
224
224
 
225
- : オブジェクト種別 = eEnemy
225
+ : オブジェクト種別 = eBox
226
226
 
227
227
  {}
228
228
 

4

誤記修正

2021/05/15 16:08

投稿

rinjinto
rinjinto

スコア170

test CHANGED
@@ -244,11 +244,11 @@
244
244
 
245
245
  {
246
246
 
247
- player = new player();
247
+ Player *player = new player();
248
-
248
+
249
- enemy = new Enemy();
249
+ Enemy *enemy = new Enemy();
250
-
250
+
251
- box = new Box();
251
+ Box *box = new Box();
252
252
 
253
253
  Object* objArray[] = {player, enemy, box};
254
254
 

3

質問内容の変更に伴い、実装コードを修正

2021/05/15 16:04

投稿

rinjinto
rinjinto

スコア170

test CHANGED
@@ -77,3 +77,209 @@
77
77
  }
78
78
 
79
79
  ```
80
+
81
+
82
+
83
+ **質問内容の変更に伴い、コードを変更してみました。**
84
+
85
+
86
+
87
+ ラフなコードを書いているので、細かいところで間違いがあると思いますがご容赦を。
88
+
89
+
90
+
91
+ ```c++
92
+
93
+ //オブジェクト種別
94
+
95
+ enum {
96
+
97
+ ePlayer = 0,
98
+
99
+ eEnemy,
100
+
101
+ eBox,
102
+
103
+ eMax,
104
+
105
+ };
106
+
107
+
108
+
109
+ class Object
110
+
111
+ {
112
+
113
+ public:
114
+
115
+ (注釈:本来はprivateにすべきだが、簡単にするためにpublicにしている)
116
+
117
+ int 座標;
118
+
119
+ int スケール;
120
+
121
+ int 当たり判定用のコリジョンクラス;
122
+
123
+ int オブジェクト種別;
124
+
125
+
126
+
127
+ Object (const Object& obj) {
128
+
129
+ 座標 = obj.座標;
130
+
131
+ スケール = obj.スケール;
132
+
133
+ 当たり判定用のコリジョンクラス = obj.当たり判定用のコリジョンクラス;
134
+
135
+ オブジェクト種別 = obj.オブジェクト種別
136
+
137
+ }
138
+
139
+  public 初期化関数;
140
+
141
+  public 更新関数;
142
+
143
+  public 描画関数;
144
+
145
+ }
146
+
147
+
148
+
149
+ class Character: class Object
150
+
151
+ {
152
+
153
+ public:
154
+
155
+ Bulletクラス;
156
+
157
+
158
+
159
+ Character (const Character& character)
160
+
161
+ : Object(character)
162
+
163
+ {}
164
+
165
+ }
166
+
167
+
168
+
169
+ class Player: class Character
170
+
171
+ {
172
+
173
+ public:
174
+
175
+ Player()
176
+
177
+ : オブジェクト種別 = ePlayer
178
+
179
+ {}
180
+
181
+
182
+
183
+ Player(const Player& player)
184
+
185
+ : オブジェクト種別 = ePlayer,
186
+
187
+ Character(player)
188
+
189
+ {}
190
+
191
+ }
192
+
193
+
194
+
195
+ class Enemy: class Character
196
+
197
+ {
198
+
199
+ Enemy()
200
+
201
+ : オブジェクト種別 = eEnemy
202
+
203
+ {}
204
+
205
+
206
+
207
+ Enemy(const Enemy& enemy)
208
+
209
+ : オブジェクト種別 = eEnemy,
210
+
211
+ Character(enemy)
212
+
213
+ {}
214
+
215
+ }
216
+
217
+
218
+
219
+ class Box: class Object
220
+
221
+ {
222
+
223
+ Box()
224
+
225
+ : オブジェクト種別 = eEnemy
226
+
227
+ {}
228
+
229
+
230
+
231
+ Box(const Box& box)
232
+
233
+ : オブジェクト種別 = eBox,
234
+
235
+ Character(box)
236
+
237
+ {}
238
+
239
+ }
240
+
241
+
242
+
243
+ int main(void)
244
+
245
+ {
246
+
247
+ player = new player();
248
+
249
+ enemy = new Enemy();
250
+
251
+ box = new Box();
252
+
253
+ Object* objArray[] = {player, enemy, box};
254
+
255
+
256
+
257
+ for (int i = 0; i < 3; i++) {
258
+
259
+ switch (objArray[i].オブジェクト種別) {
260
+
261
+ case ePlayer:
262
+
263
+ (dynamic_cast<Player*>objArray[i])->(Playerクラス専用関数);
264
+
265
+ break;
266
+
267
+ case eEnemy:
268
+
269
+ (dynamic_cast<Enemy*>objArray[i])->(Enemyクラス専用関数);
270
+
271
+ break;
272
+
273
+ case eBox:
274
+
275
+ (dynamic_cast< Box*>objArray[i])->(Boxクラス専用関数);
276
+
277
+ break;
278
+
279
+ }
280
+
281
+ }
282
+
283
+ }
284
+
285
+ ```

2

コピーコンストラクタを修正

2021/05/15 15:59

投稿

rinjinto
rinjinto

スコア170

test CHANGED
@@ -40,11 +40,13 @@
40
40
 
41
41
  public:
42
42
 
43
- B(const A &a) {
43
+ B(const A &a)
44
44
 
45
- this.memA = b.memA;
45
+ : A(a)
46
46
 
47
- }
47
+ {}
48
+
49
+
48
50
 
49
51
  void funcB() {
50
52
 

1

回答を受けてクラスにコンストラクタとメンバーを追加

2021/05/14 14:09

投稿

rinjinto
rinjinto

スコア170

test CHANGED
@@ -1,6 +1,10 @@
1
1
  質問の意図ですが、下記のようなもので「オーバーライドされていないfuncA()を呼び出す」ということで間違いないでしょうか?
2
2
 
3
3
  その通りであれば、下記のコードに書いたとおりに基底クラスの関数名を書けばいいです。
4
+
5
+
6
+
7
+ **回答を受けてコンストラクタとメンバーを追加しました。**
4
8
 
5
9
 
6
10
 
@@ -11,6 +15,14 @@
11
15
  {
12
16
 
13
17
  public:
18
+
19
+ int memA;
20
+
21
+ A(const A &a) {
22
+
23
+ this.memA = a.memA;
24
+
25
+ }
14
26
 
15
27
  void funcA() {
16
28
 
@@ -27,6 +39,12 @@
27
39
  {
28
40
 
29
41
  public:
42
+
43
+ B(const A &a) {
44
+
45
+ this.memA = b.memA;
46
+
47
+ }
30
48
 
31
49
  void funcB() {
32
50