質問するログイン新規登録

回答編集履歴

7

typo修正

2021/05/15 17:40

投稿

rinjinto
rinjinto

スコア170

answer CHANGED
@@ -65,7 +65,7 @@
65
65
  座標 = obj.座標;
66
66
  スケール = obj.スケール;
67
67
  当たり判定用のコリジョンクラス = obj.当たり判定用のコリジョンクラス;
68
- オブジェクト種別 = obj.オブジェクト種別
68
+ オブジェクト種別 = obj.オブジェクト種別;
69
69
  }
70
70
   public 初期化関数;
71
71
   public 更新関数;
@@ -86,7 +86,7 @@
86
86
  {
87
87
  public:
88
88
  Player()
89
- : Character()
89
+ : Character(),
90
90
  オブジェクト種別 = ePlayer
91
91
  {}
92
92
 
@@ -99,7 +99,7 @@
99
99
  class Enemy: class Character
100
100
  {
101
101
  Enemy()
102
- : Character()
102
+ : Character(),
103
103
  オブジェクト種別 = eEnemy
104
104
  {}
105
105
 
@@ -112,7 +112,7 @@
112
112
  class Box: class Object
113
113
  {
114
114
  Box()
115
- : Object()
115
+ : Object(),
116
116
  オブジェクト種別 = eBox
117
117
  {}
118
118
 

6

誤記修正

2021/05/15 17:40

投稿

rinjinto
rinjinto

スコア170

answer CHANGED
@@ -86,7 +86,8 @@
86
86
  {
87
87
  public:
88
88
  Player()
89
+ : Character()
89
- : オブジェクト種別 = ePlayer
90
+ オブジェクト種別 = ePlayer
90
91
  {}
91
92
 
92
93
  Player(const Player& player)
@@ -98,7 +99,8 @@
98
99
  class Enemy: class Character
99
100
  {
100
101
  Enemy()
102
+ : Character()
101
- : オブジェクト種別 = eEnemy
103
+ オブジェクト種別 = eEnemy
102
104
  {}
103
105
 
104
106
  Enemy(const Enemy& enemy)
@@ -110,7 +112,8 @@
110
112
  class Box: class Object
111
113
  {
112
114
  Box()
115
+ : Object()
113
- : オブジェクト種別 = eBox
116
+ オブジェクト種別 = eBox
114
117
  {}
115
118
 
116
119
  Box(const Box& box)

5

誤記修正

2021/05/15 16:18

投稿

rinjinto
rinjinto

スコア170

answer CHANGED
@@ -110,7 +110,7 @@
110
110
  class Box: class Object
111
111
  {
112
112
  Box()
113
- : オブジェクト種別 = eEnemy
113
+ : オブジェクト種別 = eBox
114
114
  {}
115
115
 
116
116
  Box(const Box& box)

4

誤記修正

2021/05/15 16:08

投稿

rinjinto
rinjinto

スコア170

answer CHANGED
@@ -121,9 +121,9 @@
121
121
 
122
122
  int main(void)
123
123
  {
124
- player = new player();
124
+ Player *player = new player();
125
- enemy = new Enemy();
125
+ Enemy *enemy = new Enemy();
126
- box = new Box();
126
+ Box *box = new Box();
127
127
  Object* objArray[] = {player, enemy, box};
128
128
 
129
129
  for (int i = 0; i < 3; i++) {

3

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

2021/05/15 16:04

投稿

rinjinto
rinjinto

スコア170

answer CHANGED
@@ -37,4 +37,107 @@
37
37
  }
38
38
  return 0;
39
39
  }
40
+ ```
41
+
42
+ **質問内容の変更に伴い、コードを変更してみました。**
43
+
44
+ ラフなコードを書いているので、細かいところで間違いがあると思いますがご容赦を。
45
+
46
+ ```c++
47
+ //オブジェクト種別
48
+ enum {
49
+ ePlayer = 0,
50
+ eEnemy,
51
+ eBox,
52
+ eMax,
53
+ };
54
+
55
+ class Object
56
+ {
57
+ public:
58
+ (注釈:本来はprivateにすべきだが、簡単にするためにpublicにしている)
59
+ int 座標;
60
+ int スケール;
61
+ int 当たり判定用のコリジョンクラス;
62
+ int オブジェクト種別;
63
+
64
+ Object (const Object& obj) {
65
+ 座標 = obj.座標;
66
+ スケール = obj.スケール;
67
+ 当たり判定用のコリジョンクラス = obj.当たり判定用のコリジョンクラス;
68
+ オブジェクト種別 = obj.オブジェクト種別
69
+ }
70
+  public 初期化関数;
71
+  public 更新関数;
72
+  public 描画関数;
73
+ }
74
+
75
+ class Character: class Object
76
+ {
77
+ public:
78
+ Bulletクラス;
79
+
80
+ Character (const Character& character)
81
+ : Object(character)
82
+ {}
83
+ }
84
+
85
+ class Player: class Character
86
+ {
87
+ public:
88
+ Player()
89
+ : オブジェクト種別 = ePlayer
90
+ {}
91
+
92
+ Player(const Player& player)
93
+ : オブジェクト種別 = ePlayer,
94
+ Character(player)
95
+ {}
96
+ }
97
+
98
+ class Enemy: class Character
99
+ {
100
+ Enemy()
101
+ : オブジェクト種別 = eEnemy
102
+ {}
103
+
104
+ Enemy(const Enemy& enemy)
105
+ : オブジェクト種別 = eEnemy,
106
+ Character(enemy)
107
+ {}
108
+ }
109
+
110
+ class Box: class Object
111
+ {
112
+ Box()
113
+ : オブジェクト種別 = eEnemy
114
+ {}
115
+
116
+ Box(const Box& box)
117
+ : オブジェクト種別 = eBox,
118
+ Character(box)
119
+ {}
120
+ }
121
+
122
+ int main(void)
123
+ {
124
+ player = new player();
125
+ enemy = new Enemy();
126
+ box = new Box();
127
+ Object* objArray[] = {player, enemy, box};
128
+
129
+ for (int i = 0; i < 3; i++) {
130
+ switch (objArray[i].オブジェクト種別) {
131
+ case ePlayer:
132
+ (dynamic_cast<Player*>objArray[i])->(Playerクラス専用関数);
133
+ break;
134
+ case eEnemy:
135
+ (dynamic_cast<Enemy*>objArray[i])->(Enemyクラス専用関数);
136
+ break;
137
+ case eBox:
138
+ (dynamic_cast< Box*>objArray[i])->(Boxクラス専用関数);
139
+ break;
140
+ }
141
+ }
142
+ }
40
143
  ```

2

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

2021/05/15 15:59

投稿

rinjinto
rinjinto

スコア170

answer CHANGED
@@ -19,9 +19,10 @@
19
19
  class B: class A
20
20
  {
21
21
  public:
22
- B(const A &a) {
22
+ B(const A &a)
23
- this.memA = b.memA;
23
+ : A(a)
24
- }
24
+ {}
25
+
25
26
  void funcB() {
26
27
  printf("B¥n");
27
28
  }

1

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

2021/05/14 14:09

投稿

rinjinto
rinjinto

スコア170

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