社区
C语言
帖子详情
到底什么是虚函数?
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
打赏
举报
回复
在父类中子类的某些功能相同但接口不同的成员留空间
什么是
虚函数
在面向对象的C++语言中,虚...什么是
虚函数
:
虚函数
是指一个类中你希望重载的成员函数 ,当你用一个 基类指针或引用 指向一个继承类对象的时候,调用一个
虚函数
时, 实际调用的是继承类的版本。 ——摘自MSDN 1 #i...
java中所有的函数都是
虚函数
吗_Java语言
到底
有没有
虚函数
?
其中有一条是,java中有没有
虚函数
?本文将从
虚函数
的定义及java字节码层面上告诉你答案。一、
虚函数
的定义定义:在某基类中声明为 virtual 并在一个或多个派生类中被重新定 义的成员函数,用法格式为:virtual 函数...
Java语言
到底
有没有
虚函数
?
其中有一条是,java中有没有
虚函数
?本文将从
虚函数
的定义及java字节码层面上告诉你答案。 定义:在某基类中声明为 virtual 并在一个或多个派生类中被重新定 义的成员函数,用法格式为:virtual 函数返回类型 ...
简述
虚函数
表
据百度百科描述,C++并未规定用何种方法实现
虚函数
,但是大部分编译器厂商都选择使用
虚函数
表这种方法,那
到底
什么是
虚函数
表???
虚函数
表,称为V-Table。
虚函数
表是一片连续的内存区域,每个内存单元存放着...
(转)构造函数不能声明为
虚函数
,析构函数可以声明为
虚函数
,而且有时是必须声明为
虚函数
构造函数不能声明为
虚函数
,析构函数可以声明为
虚函数
,而且有时是必须声明为
虚函数
。 不建议在构造函数和析构函数里面调用
虚函数
。构造函数不能声明为
虚函数
的原因是: 1 构造一个对象的时候,必须知道对象的实际...
C语言
69,371
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章