class Base
{
int iBase;
public:
virtual void display()
{
cout<<"I am a Base Class"<<endl;
}
};
class Derived : public Base
{
int iDerived;
public:
Derived()
{
cout<<"In Derived Default Constructor"<<endl;
iDerived=10;
}
void display()
{
cout<<"I am in Derived Class"<<endl;
cout<<"value of iDerived :"<<iDerived<<endl;
iDerived=100;
cout<<"value of iDerived :"<<iDerived<<endl;
}
};
メインで:
Base *varBase;
Derived varDerived;
varBase = &varDerived;
varBase->display();
varBase->iDerived=10; // Error: iDerived is not a member of Base: ?????
こんにちは、みんな、
オブジェクトスライシングを理解し、いくつかのサンプルプログラムを試してみています。
ポインタ参照でどこかを読んだObjcetSlicingは起こりません。
しかし、以下の例では、からiDerived
アクセスできないことに気づいていますが、ローカルスコープのdisplayメソッドに含まれていなくてもアクセスできます。Base pointer(varBase)
virtual display method of class
今私の質問は:
- 仮想関数でのみiDerived変数にアクセスできるのはなぜですか?これは適切ですか?
- オブジェクトのスライスを回避する方法。