基类指针指向派生类的问题

刚才发个帖子,没写好,弄得乱起八糟的,这次从新开个帖子
class myClass{

  public:
int m,n;
myClass(){
m=10;
cout<<"ji lei gou zao han shu"<<endl;
}
void add()
{
cout<<"wo shi ji lei"<<endl;
}
}
class thirdClass:public myClass{
  public:
thirdClass(){
cout<<"zi lei gou zao han shu"<<endl;
m=20;
  }
void add()
{
cout<<"wo shi zi lei"<<endl;
  }
};
int main(int argc, char* argv[])
{
myClass *my=new thirdClass;
my->add();
cout<<my->m<<endl;
delete my;
return 0;
}
为什么my->add();调用的是基类的add()函数,而my->m调用的是派生类的成员变量呢?如果能从派生类的内存结构角度来解释一下最好了!

作者: BigBlackTree   发布时间: 2011-06-14

C/C++ code
int main(int argc, char* argv[])
{
    myClass *my=new thirdClass;  //my指针的静态类型是myClass,因为没有多态其动态类型也是myClass,所以使用my指针去调用add成员函数时,调用的是基类的myClass的add
    my->add();
    cout<<my->m<<endl;
    delete my;

    system("PAUSE");
    return 0;
}

thirdClass* third = new thirdClass;
此时third->add调用的是派生类的add,此时在派生类的add覆盖了基类的add。

作者: dizuo   发布时间: 2011-06-14

如果基类和派生类都定义了“相同名称之函数”,那么通过对象指针调用成员函数时,到底调用了那个函数,必须视该指针的原始类型而定,而不是视指针实际所指的对象的类型而定。

作者: alweeq86   发布时间: 2011-06-14