64,685
社区成员
发帖
与我相关
我的任务
分享
bird_tweet
的目的是要鸟叫。
而具体要哪种鸟叫`~
是由外部穿的鸟的种类决定的`~
这样`只要是鸟`它总会有自己的叫法`~
所以只要有了鸟的基类和bird_tweet函数`~
你就可以听见各种鸟的叫`~
无论有多少种鸟`只要保证是只会叫的鸟`~
都可以通过bird_tweet来让它叫出来`~
所以对于函数bird_tweet这个借口来说`~
它无需做任何改变就可以发出各种鸟的叫声`~
这部分还是需要你慢慢深入理解的`~
学习的过程是漫长的`~
希望我的这个例子对你有所帮助`~
/**
* @file test.cpp
* @author Jain <Jain_Y@126.com>
* @date Sun Nov 11 17:32:24 2012
*
* @brief 理解多态性与虚函数
*
*
*/
/**
* 定义一个鸟类,鸟会叫。但是鸟是一个物种的统称,所以对于鸟类没有具体的叫法,
* 所以鸟类没有具体的对象,是一种抽象。
*
*/
#include <iostream>
using namespace std;
class CBird
{
public:
CBird()
{
}
virtual ~CBird()
{
}
virtual void tweet() = 0;
};
/**
* 定义乌鸦类,乌鸦是一中鸟。
* 乌鸦会按照乌鸦的叫法叫。
*
*/
class CCrow : public CBird
{
public:
CCrow()
{
}
virtual ~CCrow()
{
}
virtual void tweet()
{
cout << "Crow tweer." << endl;
}
};
/**
* 喜鹊类。
* 喜鹊也有自己的叫法。
*
*/
class CMagpie : public CBird
{
public:
CMagpie()
{
}
virtual ~CMagpie()
{
}
virtual void tweet()
{
cout << "Magpie tweer." << endl;
}
};
void bird_tweet(CBird *bird)
{
bird->tweet();
}
int main(int argc, char *argv[])
{
// 我想听乌鸦叫
CCrow crow;
bird_tweet(&crow);
CMagpie magpie;
// 我想听喜鹊叫
bird_tweet(&magpie);
return 0;
}
B g;
g.a();
A *a=new B;
a->a();
system("pause");
A *p;
B bb;
p = &bb;
p->a();
按照你的实现这么使用,就会调用基类的a(),因为,你并不能保证A *p一定会指向基类。
public是一种'is a'继承。