首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

基类指针指向子类的对象,指针没法索引子类新成员,但是虚函数可以,为什么

2012-09-19 
基类指针指向子类的对象,指针无法索引子类新成员,但是虚函数可以,为什么?#includeiostream#includestri

基类指针指向子类的对象,指针无法索引子类新成员,但是虚函数可以,为什么?
#include<iostream>
#include<string>
using namespace std;
class Animal

public:
string s1;
Animal():s1("in Animal"){}
  virtual void sleep()
{
cout<<"Animal sleep s1="<<s1<<endl;
}
};
class fish:public Animal
{
public:
string s2;
fish():Animal(),s2("in fish"){}
void sleep()

cout<<"fish sleep s2="<<s2<<endl;
}
};
class bigfish:public fish{
public:
void sleep(){cout<<"bigfish sleep"<<endl;}
};
void main()
{

fish sh;
Animal *an=&sh;
//!cout<<an->s2; //这里不能索引到说s2;
an->sleep();//这里进入sleep()以后却可以打印s2;
}
我想知道在哪里记录了类的成员信息;又是如何进行类型检查的

[解决办法]
Animal类声明不包含s2,所以不能通过Animal访问它。
Animal *an=&sh;an所指对象布局下其实也有s2,可以通过string* p = (string*)((char*)an + sizeof(Animal));得到

具体知识参见侯捷XXX对象模型

热点排行