/*
这是孙鑫书上面的一个例子
*/
#include <cstdlib>
#include <iostream>
using namespace std;
class animal
{
public:
void eat()
{cout<<"animal eat"<<endl;}
void sleep()
{cout<<"animal sleep"<<endl;}
void breathe()
{cout<<"animal breathe"<<endl;}
};
class fish:public animal
{
public:
void breathe()
{cout<<"fish breathe"<<endl;}
};
void fn(animal* pAn)
{
pAn->breathe();
}
int main(int argc, char *argv[])
{
animal *pAn;
fish fh;
pAn=&fh;
fn(pAn);
system("PAUSE");
return EXIT_SUCCESS;
}
/*
当fish类继承animal时, 实际上在内存里,是在animal的内存地址上增加其多了的内容,即fish类是有两部分组成的:
this指针
------> --------------------
| |
|animal对象所占 |
|---------------------| --->fish对象所占地址空间
| fish对象自身增 |
| 加部分 |
|-------------------- |
所以当把fh的地址给PAn指针的时候, 调用时,this指针所指位置如图,所以调用pAn->breathe(),是animal的breathe()函数。
*/
类别: c语言学习 查看评论