C++之虚函数
2015-11-16 15:18
295 查看
引入原因:为了方便使用多态特性,我们常常需要在基类中定义虚函数。
class Cman
{
public:
virtual void Eat(){……};
void Move();
private:
};
class CChild : public CMan
{
public:
virtual void Eat(){……};
private:
};
CMan m_man;
CChild m_child;
CMan *p ; //虚函数的使用精髓,如果不定义基类的指针去使用,虚函数就没有太大的意义,
//因为虚函数的实现是通过基类的指针指向派生类来实现的虚函数
p = &m_man ;
p->Eat(); //始终调用CMan的Eat成员函数,不会调用 CChild 的
p = &m_child;
p->Eat(); //如果子类实现(覆盖)了该方法,则始终调用CChild的Eat函数
//不会调用CMan 的 Eat 方法;如果子类没有实现该函数,则调用CMan的Eat函数
p->Move(); //子类中没有该成员函数,所以调用的是基类中的
有人可能会想,定义虚函数又什么用啊?其实很有用,比如你想描述一些事物的属性给别人,而自己不想去实现,就可以定义虚函数,比如盖楼房,你是老板,你给建筑公司描述清楚楼房特性,多少层,建筑公司就可以按照你的方法去实现。
class Cman
{
public:
virtual void Eat(){……};
void Move();
private:
};
class CChild : public CMan
{
public:
virtual void Eat(){……};
private:
};
CMan m_man;
CChild m_child;
CMan *p ; //虚函数的使用精髓,如果不定义基类的指针去使用,虚函数就没有太大的意义,
//因为虚函数的实现是通过基类的指针指向派生类来实现的虚函数
p = &m_man ;
p->Eat(); //始终调用CMan的Eat成员函数,不会调用 CChild 的
p = &m_child;
p->Eat(); //如果子类实现(覆盖)了该方法,则始终调用CChild的Eat函数
//不会调用CMan 的 Eat 方法;如果子类没有实现该函数,则调用CMan的Eat函数
p->Move(); //子类中没有该成员函数,所以调用的是基类中的
有人可能会想,定义虚函数又什么用啊?其实很有用,比如你想描述一些事物的属性给别人,而自己不想去实现,就可以定义虚函数,比如盖楼房,你是老板,你给建筑公司描述清楚楼房特性,多少层,建筑公司就可以按照你的方法去实现。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- c#中虚函数的相关使用方法
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性