到底什么是虚函数?

feiben007 2003-10-04 08:05:26
到底什么是虚函数?
...全文
72 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tata_1980 2003-10-08
  • 打赏
  • 举报
回复
gujing01(巴洛克) 的比较好理解。
举个例子:
有2个类:Mammal和Dog
当然,dog是Mammal(哺乳动物)的派生类。
Mammal有一个方法:speak(){cout<<"Mammal speak!";}
Dog覆盖了这个方法:speak(){cout<<"Woof!";}
现在:Mammal *pDog=new Dog(pDog本来指向Mammal,却又给他Dog的地址,这比较好理解,因为Dog是Mammal)
然后:pDog->Speak();会出现什么情况呢?会出现“Mammal Speak”
如果用虚函数,就会是“woof”了
代码如下:
----------------
//using virtul methods
#include <iostream>
using namespace std;

class Mammal
{
public:
Mammal():itsAge(1){cout<<"Mammal construcotr..\n";}
virtual ~Mammal() {cout<<"mammal destructor..\n";}
void Move() const {cout <<"mammal move one step\n";}
virtual void Speak() const {cout<<"Mammal speak\n";}
protected:
int itsAge;
};

class Dog : public Mammal
{
public:
Dog() {cout<<"Dog Constructor..\n";}
virtual ~Dog(){cout<<"Dog destructor..\n";}
void WagTail(){cout<<"Wagging tail..\n";}
void Speak() const {cout <<"Woof!\n";}
void Move()const{cout <<"Dog moves 5 steps..\n";}
};

int main()
{
Mammal *pDog=new Dog;
pDog->Move();
pDog->Speak ();
return 0;

}
qhgary 2003-10-05
  • 打赏
  • 举报
回复
to Jinhao(辣子鸡丁) "楼上说的那是纯虚函数"
?????? 你说的难道不是多态?? 怎么会扯到纯虚函数?
zhusunme 2003-10-05
  • 打赏
  • 举报
回复
基类指针可以指向派生类,而派生类指针不能指向基类指针,这是虚函数的基础,动态多态性通过虚函数实现。
Jinhao 2003-10-05
  • 打赏
  • 举报
回复
to qhgary(Shining) :我说的是你楼上那个,你把我二楼的位置占了所以你就成了我楼上的了
gujing01 2003-10-04
  • 打赏
  • 举报
回复
楼上的正解~
虚函数的重要作用在于:
当基类的指针变量(形参)被赋予了派生类对象的指针(实参),此时可调用派生类对象中重写过的成员函数;如果在基类中该函数没有声明为虚函数,则实际调用的是从基类继承下来的那个函数而非重写过的函数;
eric8231 2003-10-04
  • 打赏
  • 举报
回复
展现运行时多态性的成员函数。有了它可以将对象类型的确认推迟到运行阶段而不是编译阶段。
Jinhao 2003-10-04
  • 打赏
  • 举报
回复
楼上说的那是纯虚函数

class A
{
public:
virtual void abc(){ cout<<'A';} //在把virtual去掉试一试
};

class B:public A
{
public:
void abc(){ cout<<'B';}
};

void fun(A& i)
{
i.abc();
}

int main()
{
B a;
fun(a);
}
qhgary 2003-10-04
  • 打赏
  • 举报
回复
现在说出来可能你也不能完全理解,等你看明白了什么是多态就能明白什么是虚函数了
qufan 2003-10-04
  • 打赏
  • 举报
回复
在父类中子类的某些功能相同但接口不同的成员留空间

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧