用基类指针创建的派生类对象,无法访问派生类对象的数据和成员
2014-08-15 10:10
483 查看
class A{}; class B:public A{ public: void f(); int a; } int main() { A * p=new B(); } //用p无法访问B类的数据和成员函数,那么这个新建的对象存不存在f()和a?
这个新对象的储存结构仍是类B,但是p是基类对象所以没办法访问f()和a,
所以需要加virtual让f成为虚函数,或者dynamic_cast类型转向子类,
又或者((B*)p)->f(),((B*)p)->a
class CObject { public: virtual int cleanup() = 0; virtual void setid(int id)=0; virtual int getid()=0; virtual int getSize() = 0; }; class CCharacter:public CObject { public: CCharacter():m_nSize(10){} int cleanup(){ return 0;} void setid(int id){ m_id = id;} int getid(){ return m_id;} int getSize(){ return m_nSize;} private: int m_id; public: int m_nSize; }; int main() { CObject *pObject = new CCharacter; pObject->setid(123); printf("MSG:id = %d\n",pObject->getid()); cout<<pObject->getSize()<<endl; system("pause"); return 0; }
相关文章推荐
- YTU-OJ-Problem J: B3 指向基类的指针访问派生类的成员函数
- OJ——指向基类的指针访问派生类的成员函数
- 派生类对基类成员的访问权限和派生类对象对基类成员的访问权限
- 关于protected在子类创建父类对象无法访问父类protected方法或成员
- 区分“派生类对象”和“派生类”对基类成员的访问权限
- C++派生类对象访问基类的protected成员
- C++的继承操作---基类指针访问派生类问题---基类成员恢复访问属性问题
- C++派生类对象访问基类的protected成员
- 派生类的对象只能访问基类的public成员
- 派生类环境中基类对象不能访问自己的保护成员
- this指针访问对象的数据成员
- 21天学通c++之第二周 指针 8.6 访问自由存储区中对象的成员数据
- 派生类与派生类对象对基类成员的访问
- 【提问整理】protected继承,派生类对象如何访问基类成员?
- 用对象和用指向基类的指针访问成员函数
- C++基类成员函数访问派生类对象的基类成员问题
- C++派生类对象访问基类的protected成员
- 从“派生类不能访问基类对象的protected成员”开始讨论各类成员的“可见性”
- 神奇的虚函数:用基类指针访问对象的protected成员函数
- 关于基类指针、派生类指针、基类对象派、生类对象问题