#include <iostream>
using namespace std;
class A
{
int foo_ = 0;
public:
virtual int foo() const { return foo_; }
virtual ~A(){}
};
class B: public A
{
int foo_ = 1;
public:
virtual int foo() const { return foo_; }
};
int main()
{
A *a = new A();
A *b = new B();
cout << a->foo() << '\n';
cout << b->foo() << '\n';
cin.ignore();
delete a;
delete b;
}
B::foo
A::foo
から完全に別個の部材です。そのため、B::foo
の初期化ではA::foo
が更新されません。代わりに、より多くのこのような何かをしなければならないでしょう:
class
{
public:
int foo;
A(int value = 0) : foo(value) {}
};
class B : public A
{
public:
B() : A(1) {}
};
int main()
{
A *a = new B();
std::cout << a->foo;
delete a;
std::getchar();
return 0;
}
を達成するために以下に変更します。それはそれを隠している。仮想フィールドを持つことはできないので、上書きはできません。 https://stackoverflow.com/questions/19290796/override-member-field-in-derived-classesを参照してください。あなたは関数を使うことができます。 –