社区
C语言
帖子详情
到底什么是虚函数?
feiben007
2003-10-04 08:05:26
到底什么是虚函数?
...全文
97
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
打赏
举报
回复
在父类中子类的某些功能相同但接口不同的成员留空间
UG 2023 64bit 64 位系统设计软件.rar
UG NX 2023(Unigraphics NX,中文名交互式 CAD/CAM 系统),是西门子 Siemens PLM Software 研发的 CAD/CAE/CAM 一体化产品工程解决方案,提供全套数字化造型与仿真验证手段。软件功能强悍,可轻松完成各类复杂实体、曲面造型构建,广泛应用于机械装备、塑胶模具、汽车零部件、航空航天、数控加工、钣金设计等工业领域。 软件仅支持 Win10、Win11 64 位系统,不再兼容 Win7,硬件配置要求适中。软件集三维建模、工程制图、数控编程、力学与运动仿真等功能于一体,可兼容各类主流设计文件格式。 该版本优化了装配加载速度、曲面建模能力与刀路算法,运行稳定,是当下行业主流版本。 由于安装包文件过大,CSDN 无法直接上传,附件提供下载链接及配套安装教程,欢迎下载使用。
vivado XADC IP核使用教程
vivado XADC IP核使用教程
64 位 NX2023 UG 主流行业版本 无偿持续分享.rar
UG(Unigraphics NX)是一款由西门子(Siemens PLM Software)开发的交互式CAD/CAM/CAE系统。作为全球领先的产品工程解决方案,它集成了产品设计、工程仿真与制造加工于一体。其功能强大且应用广泛,能够轻松实现各种复杂实体和造型的构造,为模具、汽车、航空航天及通用机械等行业提供了高性能的机械设计与制图灵活性。
【变压器的开路试验】变压器进行开路试验时的电路连接配置(Simulink仿真实现)
内容概要:本文详细介绍了利用Simulink进行变压器开路试验的电路连接配置与仿真实现方法,重点在于通过仿真手段还原实际电力系统中变压器在空载条件下的电气特性,从而深入理解其工作原理与性能表现。文章作为电力系统仿真系列研究的一部分,系统阐述了从电路模型搭建、参数设定、仿真运行到结果分析的完整流程,突出展示了MATLAB/Simulink在电力设备建模与教学科研中的强大功能与应用价值。; 适合人群:具备电力系统基础知识,熟悉MATLAB/Simulink仿真环境,从事电气工程、自动化及相关领域的研发人员,以及高年级本科生和研究生。; 使用场景及目标:①掌握变压器开路试验的基本原理与Simulink仿真建模的具体步骤;②通过仿真实验深入理解空载电流、铁芯损耗及励磁特性等关键参数的物理意义;③为后续开展变压器短路试验、暂态过程分析以及其他电力设备的仿真研究奠定理论与实践基础。; 阅读建议:建议结合Simulink软件动手实践,逐步构建并调试电路模型,重点关注各元件参数的设置方法与测量模块的应用技巧,同时推荐参考文中提及的其他相关仿真案例进行拓展学习,以全面提升对电力系统仿真实践的整体认知与操作能力。
SoloBlog.zip
SoloBlog.zip
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章