#include<iostream>
#include<map>
using namespace std;
class A{
public:
long a;
};
class B : public A {
public:
long b;
};
void seta(A* data, int idx) {
data[idx].a = 2;
}
int main(int argc, char* argv[]){
B data[4];
for (int i = 0; i<4; ++i){
data[i].a = 1;
data[i].b = 1;
seta(data, i);
}
for (int i = 0; i<4; ++i){
std::cout << data[i].a << data[i].b;
}
return 0;
}
結果のプリントは22221111
です。C++クラスの暗黙の変換は継承します
A::a
タイプをdoubleに変更すると、結果のプリントは20201111
になります。
A::a
タイプをfloatに変更すると、結果プリントは2107374182421073741821111
になります。
どのように対処していますか?
配列はその点で多型ではありません。定義されていない動作のヒープが発生しているだけです。 – StoryTeller