社区
C++ 语言
帖子详情
小弟刚学C++,但始终搞不清楚虚函数的原理,请各位指教!!!谢谢!!!
matomypt
2003-12-12 12:13:44
小弟刚学C++,但始终搞不清楚虚函数的原理,请各位指教!!!谢谢谢!!!
...全文
47
19
打赏
收藏
微信扫一扫
点击复制链接
分享
举报
写回复
19 条
回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wawxj1314
2004-03-25
realjustin(夜海星空)
你的程序实现不了
请检查
呵呵
打赏
举报
回复
赞
realjustin
2004-01-10
动态联编:
一般函数都是在编译时就已经确定了执行什么那段代码了(静态联编),而动态联编则是指在
运行时才知道执行那段代码,那个函数;
例如:
#include "stdafx.h"
#include "iostream.h"
#include <time.h>
#include <stdlib.h>
int h()
{
return 7;
}
int m()
{
return 9;
}
int main()
{
int (* f)();
srand( (unsigned)time( NULL ) );
for(int i=0;i<10;i++)
{
if(rand()%2 )
f = m;
else
f= h;
cout<<"你好:" << (*f)()<<endl;
}
}
//执行的结果是什么呢??这就是动态联编
打赏
举报
回复
赞
realjustin
2004-01-10
虚函数的产生主要是为了解决C++的动态连编,以产生多态。
1、如果一个类中有虚函数,那么他就会有一个虚函数列表(在类前边,或类后,与编译器有关系,不去管它),虚函数列表就是一个函数指针的列表,在执行的时候因不同的执行指向不同的函数,从而实现了动态连编的效果。
2、当父类的指针指向了其子类的对象时,子类的虚函数表会覆盖掉父类的虚函数表,从而执行的时候执行的是子类的虚函数,而不是父类的函数,实现了子类真正的覆盖了父类的函数。
例如:
class A
{
int i;
public :
virtual comm(){count<<"rst :A"<<endl;}
}
class B:A
{
int j;
public:
virtual comm(){count<<"rst :B"<<endl;}
}
main()
{
A* a;
B b;
a= &b;
a-> comm();
}
//会输出::rst :B
//去掉了 virtual 就会输出:rst :A
打赏
举报
回复
赞
computer386
2004-01-08
看多了自然就明白了!!!!!!!!!
我当时也和你一样!!!!!!!!!!!!!!!!!!!!!
打赏
举报
回复
赞
sunwt
2004-01-08
关于动态联编,请在google上搜索"linkers and loaders"
打赏
举报
回复
赞
green405
2004-01-07
虚函数,个类虚就虚在所谓“推迟联编”或者“动态联编”上,一函数的调用并不是在编译时刻被确定的,而是在运行时刻被确定的。由于编写代码的时候并不能确定被调用的是基类的函数还是哪个派生类的函数,所以被成为“虚”函数。
不是很明什么是“动态联编”?看完楼上的资料,还是不明,能进一步解析吗?谢谢
打赏
举报
回复
赞
ambition2005
2003-12-15
这个问题太大了,不是一点能讲完的,楼主找本书看看啊
c++ primer也不错
打赏
举报
回复
赞
knightmsn
2003-12-15
建议看thinking in c++,相当好的书
打赏
举报
回复
赞
Edison621
2003-12-12
看書
錢能的《C++程序設計》不錯
當然﹐有興趣看些英文原版圖書的更好
打赏
举报
回复
赞
layman2008
2003-12-12
http://www.vckbase.com/document/viewdoc.asp?id=939
给你个地址,自己去看看吧
打赏
举报
回复
赞
BenWong1981126
2003-12-12
每一个类有个相应的虚函数表,这是调用virtual 函数的关键
类把自己定义为virtual 类型的函数指针填入该表中,
继承类也继承了这个表,在定义自己的virtual 函数时候,把属于自己的v函数的指针也填到表里面去了
这样,在每个类调用自己的v 函数时就有不同的版本,这是polymorphism实现的机制吧。
请指教
打赏
举报
回复
赞
redhat_xu
2003-12-12
虚函数一般用于动态联编
所以联编一般分为静态联编和动态联编
动态联编在编译之前就已经虚函数加入到相应的代码处.
打赏
举报
回复
赞
laker_tmj
2003-12-12
up learn
打赏
举报
回复
赞
glacierrr
2003-12-12
虚函数主要注意的就是其动态绑定,在执行时才知道调用那个具体的函数。
打赏
举报
回复
赞
boy8765
2003-12-12
标记一下
打赏
举报
回复
赞
redhat_xu
2003-12-12
首先必须知道虚函数是干什么用的,
一般来说虚函数是为了解决子类继承父类的成员函数后又
不完全与父类的成员函数的功能相同,故将其父类的成员函数设为虚函数,供在子类中
重新定义,从而体现多态的作用。即虚函数可以对父类的成员函数进行改写。当然只能
在当前类中使用。
下面举个简单例子:
class A
{
int i;
public:
A(int m)
{ i=m;
}
~A(){}
virtual void fun()
{ cout <<i<< endl;}
};
class B: public A
{
int j;
public:
B(int n){
j=n;}
~B(){}
virtual void fun()
{ cout <<j<< endl;}
};
void main()
{
A a(2);
B b(3);
a.fun();
b.fun();
}
输出结果为:2和3,
以上就是虚函数的使用方法。
打赏
举报
回复
赞
lsq2008
2003-12-12
虚函数用于实现多态,所有的C++的书籍都会讲这方面的内容的!!!
打赏
举报
回复
赞
李宠波
2003-12-12
来这里看看,有好多免费书下载的,不乏经典之作:
http://expert.csdn.net/Expert/topic/1583/1583456.xml?temp=.8206903
祝你马到成功!
打赏
举报
回复
赞
leyt
2003-12-12
候捷的书里面也有讲解
打赏
举报
回复
赞
相关推荐
pagerank算法讲解.ppt
pagerank算法讲解.ppt
喜马拉雅音频内容数据分析.docx
喜马拉雅音频内容数据分析.docx
南宁师范大学-理学-软件工程-名词解释(计网+数据机构).docx
南宁师范大学-理学-软件工程导论-名词解释(计网+数据机构)
电工学讲义 第三章 三相交流电路.ppt
电工学讲义 第三章 三相交流电路.ppt
线下商场基于LBS的推荐系统方案设计.docx
线下商场基于LBS的推荐系统方案设计.docx
BIM技术制作技术标.pdf
BIM技术制作技术标.pdfBIM技术制作技术标.pdfBIM技术制作技术标.pdfBIM技术制作技术标.pdfBIM技术制作技术标.pdf
详解 结算系统设计.docx
详解 结算系统设计.docx
【数据分析】Windkessel模型参数估计方法的分析和比较附论文和matlab代码.zip
【数据分析】Windkessel模型参数估计方法的分析和比较附论文和matlab代码.zip
电工学讲义 第一章 电话分析基础.ppt
电工学讲义 第一章 电话分析基础.ppt
专项体育年度训练工作计划及鉴定.docx
专项体育年度训练工作计划及鉴定.docx
[CMS程序]动易SiteFactory CMS 内容管理系统 v1.2 Bulid 081020_powereasy_site
[CMS程序]动易SiteFactory CMS 内容管理系统 v1.2 Bulid 081020_powereasy_site[CMS程序]动易SiteFactory CMS 内容管理系统 v1.2 Bulid 081020_powereasy_site[CMS程序]动易SiteFactory CMS 内容管理系统 v1.2 Bulid 081020_powereasy_site[CMS程序]动易SiteFactory CMS 内容管理系统 v1.2 Bulid 081020_powereasy_site 1.合个人学习技术做项目参考合个人学习技术做项目参考 2.适合学生做毕业设计项目参考适合学生做毕业设计项目技术参考 3.适合小团队开发项目技术参考适合小团队开发项目技术参考
[CMS程序]小孔子内容管理系统XkCms v1.1_xkcms.zip源码ASP.NET网站源码打包下载
[CMS程序]小孔子内容管理系统XkCms v1.1_xkcms.zip源码ASP.NET网站源码打包下载[CMS程序]小孔子内容管理系统XkCms v1.1_xkcms.zip源码ASP.NET网站源码打包下载[CMS程序]小孔子内容管理系统XkCms v1.1_xkcms.zip源码ASP.NET网站源码打包下载[CMS程序]小孔子内容管理系统XkCms v1.1_xkcms.zip源码ASP.NET网站源码打包下载 1.合个人学习技术做项目参考合个人学习技术做项目参考 2.适合学生做毕业设计项目参考适合学生做毕业设计项目技术参考 3.适合小团队开发项目技术参考适合小团队开发项目技术参考
申
请
-考核制度博士报名材料清单【模板】.pdf
申
请
-考核制度博士报名材料清单【模板】.pdf申
请
-考核制度博士报名材料清单【模板】.pdf申
请
-考核制度博士报名材料清单【模板】.pdf申
请
-考核制度博士报名材料清单【模板】.pdf申
请
-考核制度博士报名材料清单【模板】.pdf申
请
-考核制度博士报名材料清单【模板】.pdf申
请
-考核制度博士报名材料清单【模板】.pdf申
请
-考核制度博士报名材料清单【模板】.pdf
基于Web的线上外卖订餐(JAVA+JSP+MYSQL+Spring MVC+Hibernate+Spring+文档).zip
摘要:当代生活节奏不断加快,消费者对订餐效率越来越重视。针对传统电话订餐方式的商品信息展示不够直观、订单管理不便等缺陷,本文设计了一种稳定、高效且低成本的线上外卖订餐系统。本系统基于B/S架构,采用Spring MVC+Hibernate+Spring作为开发框架,以MySQL为数据库,Tomcat为服务器,实现了订餐消费者、商家和管理员三类用户的各种功能。经测试,该系统不仅令消费者订餐更为便捷、选择更为丰富,而且扩展了商家的销售渠道,提高了订单管理的效率,基本满足了各类用户的不同需求,简化了消费者和商家的互动流程。 关键词:线上订餐系统;订单管理;Spring MVC+Hibernate+Spring框架;MySQL数据库
半导体行业深度研究:全球WiFi芯片的竞争格局及市场潜力(2022)(24页).pdf
半导体行业深度研究:全球WiFi芯片的竞争格局及市场潜力(2022)(24页).pdf
一个基于html的心形代码.zip
一个基于html的心形代码
【信息技术提升2.0】A5技术支持的课堂导入作业2—课堂导入设计.docx,这是一份不错的文件
【信息技术提升2.0】A5技术支持的课堂导入作业2—课堂导入设计.docx,这是一份不错的文件
数据分析师面试试题汇总.docx
数据分析师面试试题汇总.docx
网络安全各大厂面试常见问题总结.docx
网络安全各大厂面试常见问题总结.docx
中小学信息技术课题申报:教育信息化2.0下小学生学习机制研究.docx,这是一份不错的文件
中小学信息技术课题申报:教育信息化2.0下小学生学习机制研究.docx,这是一份不错的文件
发帖
C++ 语言
加入
微信扫一扫
点击复制链接
6.1w+
社区成员
24.9w+
社区内容
C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
帖子事件
创建了帖子
2003-12-12 12:13
社区公告
暂无公告