随笔 - 2  文章 - 17  trackbacks - 0
<2009年2月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
1234567

常用链接

留言簿(1)

随笔档案(2)

搜索

  •  

最新评论

阅读排行榜

评论排行榜

      两年。心总是映着月色泛起圈圈涟漪,只有丝丝缕缕青烟才能遮住我的眼,截断那思绪……
      两年……
      两年。我学会了放弃,却不懂得忘记;学会了微笑,而沉默是不变的主旋律;学会了生活,也失去了目标;学会了快乐,依旧有人在抽泣,泪滴落在杯中泛起圈圈涟漪。
      两年……
      许多个两年之后,皎月当空……
posted @ 2009-02-04 09:06 末檐儿@了修 阅读(200) | 评论 (1)编辑 收藏
一会儿再把分析转过来。



#include
<iostream>
using namespace std;
class A
{
public:
    A(
int n):val(n){}
protected:
   
int val;
};
class B:public A
{
public:
    B(
int n):A(n)
    {
        pB
=(n>0? new B(n-1):0);
    }
   
~B(){delete pB;}
   
void Display()
    {
        cout
<< val << endl;
       
if(pB!=0)pB->Display();
    }
private:
    B
*pB;
};
int main()
{
    B b(
4);
    b.Display();
   
return 0;
}



==================================================================




程序的运行结果是:
                4
                3
                2
                1
                0



===================================================================

tangshuiling 给出的解释:

B(int n):A(n)
{
pB=(n>0? new B(n-1):0);
}

B b(4); /**用 4 初始化 A 类成员 val, val=4*/
/**此时 n=4 满足大于 0 的条件,调用 new B(3),同时栈要维护现场,
存储 val=4,pb=new B(3) 产生的对象地址设为 pb1 以及函数的下个语句
地址,此时是‘}’就相当于return。
*/

依次类推栈中保存了 (val=4,pb1) (val=3,pb2) (val=2,pb3) (val=1,pb4) 最后 val=0, pb=0
,遇到‘}’符号本应该 return 的,但由于此时栈不空,因此还必须做出栈的操作,因此,最后出栈是:val=4, pb1。

b.Display();
调用此句,显然此时 val=4,pb=pb1 pb1->display(); 此时 val 应该是
等于3,pb1=new B(3); 依次类推:

pb2->display(); val=2
pb3->display(); val=1
pb4->display(); val=0

此时 pb=0,不满足调用条件直接 return 了

from:http://topic.csdn.net/u/20090109/00/67841ac5-3197-4842-b0e9-ce3c6aa962d9.html
posted @ 2009-01-12 09:34 末檐儿@了修 阅读(1467) | 评论 (16)编辑 收藏
仅列出标题