インスタンス変数が継承されている場合、サブクラスで変更してもスーパークラスの値には影響しません。逆も同様です。これは、2 つのインスタンス変数があることを意味します。しかし、私が行うsizeof( sublcass )
と、インスタンス変数は 1 つだけがサイズに含まれます。スーパークラス用に作成される 2 番目のオブジェクトはありますか?
ここに私が言っていることを説明するための小さなスニペットがあります:
struct Super {
int x;
void func() {
cout << "SUPERCLASS" << endl;
cout << x << endl; /* prints garbage value */
x = 4;
cout << x << endl; /* prints 4 */
}
};
struct Sub : public Super {
void func() {
x = 10;
Super b;
b.func();
cout << "SUB" << endl;
cout << x << endl; /* prints 10 */
}
};
int main() {
Sub b;
b.func();
return 0;
}
出力:
SIZE: 4
SUPERCLASS
2867344
4
SUB
10