游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1324|回复: 2

谁能帮我解释一下这个虚函数到底是怎么运行的啊?

[复制链接]

29

主题

97

帖子

99

积分

注册会员

Rank: 2

积分
99
发表于 2005-9-19 15:14:00 | 显示全部楼层 |阅读模式
//这是一个游戏调用的程序,改了一下。但是始终不明白他是如何运行的。请各位大大帮忙说明一下。已经困惑了小弟一个星期了

#include<iostream>
#include<conio.h>
#include<atlbase.h>
class A{

public:

   int virtual go(int *h,int n)
   {
      if (n==0) return 0;
          ATLTRACE2("ClassA:%i\n",*h);
         *h=*h-5;
          return (*h)*go(h,n-1);
    };

};


class B:public A{
public:
   int go(int *h,int n)
        {
       
          ATLTRACE2("ClassB: %i\n",*h);
          return A::go(h,n);
        };

};

void main()
{
        B CB;
        B *b=NULL;
        b=&CB;
        int i=100;
        b->go(&i,5);
        ATLTRACE2("%d\n",i);
        }
//执行结果为:
ClassB: 100
ClassA:100
ClassB: 95
ClassA:95
ClassB: 90
ClassA:90
ClassB: 85
ClassA:85
ClassB: 80
ClassA:80
ClassB: 75
75

29

主题

97

帖子

99

积分

注册会员

Rank: 2

积分
99
 楼主| 发表于 2005-9-19 16:16:00 | 显示全部楼层

Re:谁能帮我解释一下这个虚函数到底是怎么运行的啊?

没有人知道吗?

0

主题

172

帖子

176

积分

注册会员

Rank: 2

积分
176
发表于 2005-9-19 17:06:00 | 显示全部楼层

Re:谁能帮我解释一下这个虚函数到底是怎么运行的啊?

很简单啊,不就是一个递归的过程么。

子类B的go,其中显式调用了父类A的go(注意这里是显式调用A::go)
父类A又调用了go(注意,这里是调用虚函数go,不是A::go),这就去调用了子类B的go
如此反复,直至A中的if(n==0) return 0;
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-27 22:01

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表