社区
C++ 语言
帖子详情
小弟刚学C++,但始终搞不清楚虚函数的原理,请各位指教!!!谢谢!!!
matomypt
2003-12-12 12:13:44
小弟刚学C++,但始终搞不清楚虚函数的原理,请各位指教!!!谢谢谢!!!
...全文
147
19
打赏
收藏
小弟刚学C++,但始终搞不清楚虚函数的原理,请各位指教!!!谢谢!!!
小弟刚学C++,但始终搞不清楚虚函数的原理,请各位指教!!!谢谢谢!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
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
打赏
举报
回复
候捷的书里面也有讲解
什么是
虚函数
什么是
虚函数
[转帖]让你明白什么是
虚函数
(
C++
)
虚函数
联系到多态,多态联系到继承。所以本文中都是在继承层次上做文章。没了继承,什么都没得谈。下面是
小弟
对
C++
的
虚函数
这玩意儿的理解。一, 什么是
虚函数
(如果不知道
虚函数
为何物,但有急切的想知道,那你就应该从这里开始)简单地说,那些被virtual关键字修饰的成员函数,就是
虚函数
。
虚函数
的作用,用专业术语来解释就是实现多态性(Pol
尊重原创,转载
请
注明出处
据明间说写面经的人都可以攒rp,所以
小弟
在这里也将自己的经验分享一下。 阿里面试总结: 在面对阿里的面试的时候,由于我是通过内推的,但是当时由于并没有怎么准备过,而且一面是通过电面的,属于突袭的那种类型,弄得自己一个措手不及,于是很悲催的,自己就挂了。但是收获还是有的,毕竟这算是自己的第一次面试,还记得当时问了一些如下的一些问题:1、有一些整数,把奇数排在前面,偶数排在后面。
C语言实现多态
C语言实现多态 转载:https://www.cnblogs.com/qingergege/p/9594432.html 首先声明,大神就不要看了。
小弟
水平有限。
C++
多态是通过
虚函数
表实现的,类似于JAVA多态的实现方式。关于Java多态的实现方式可以看我之前写过的一篇不是很完善的文章。从JVM角度看Java多态。 Java和
C++
不同,Java中所有的实例方法(相对于类方法,或叫静态...
c 语言编程简单实例多态性程序,C语言实现多态
C语言实现多态首先声明,大神就不要看了。
小弟
水平有限。
C++
多态是通过
虚函数
表实现的,类似于JAVA多态的实现方式。关于Java多态的实现方式可以看我之前写过的一篇不是很完善的文章。从JVM角度看Java多态。Java和
C++
不同,Java中所有的实例方法(相对于类方法,或叫静态方法而言)都是默认为
虚函数
,之前貌似看到过Java生成的字节码中,所有实例方法前面都是右virtual关键字的。
C++
中...
RT-Thread Studio TouchGFX 硬件交互
使用MVP架构实现View(V)通过Presenter(P)与Model(M)的双向数据交互。
C++ 语言
65,210
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章