标题:执行过程
只看楼主
maoenlong
Rank: 2
等 级:论坛游民
帖 子:10
专家分:15
注 册:2012-6-14
结帖率:100%
已结贴  问题点数:20 回复次数:5 
执行过程
#include<iostream.h>
class Sample
{
    int x;
    public:
        Sample(int a)
        {  x=a;
            cout<<"constructing object:x="<<x<<endl;
        }
};
void func(int n)
{
    static Sample obj(n);
}
void main()
{
    func(1);
    func(10);
}答案:constructing object:x=1
具体是怎样运行的,执行过程麻烦高手讲解一下
搜索更多相关主题的帖子: public 
2012-06-16 21:45
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
得分:20 
obj只会在第一次调用func的时候初始化一次,所以func(10);其实什么都没做。

My life is brilliant
2012-06-16 22:06
maoenlong
Rank: 2
等 级:论坛游民
帖 子:10
专家分:15
注 册:2012-6-14
得分:0 
obj是对象名吗?obj是怎样调用func函数的,主函数实参传给形参然后怎样执行啊。
2012-06-17 10:08
maoenlong
Rank: 2
等 级:论坛游民
帖 子:10
专家分:15
注 册:2012-6-14
得分:0 
#include <iostream.h>
class CSample
{ private:
 int i;
 static int k;
 public:
 CSample();
 void Display();
};
CSample::CSample()
{ 
 i=0;
 k++;
}
void CSample::Display()
{
 Cout<<”i=”<<i<<”,k=”<<k<<endl;
}
int CSample::k=0;
void main()
{ CSample a,b;
 a.Display();
 b.Display();
}
答: i=0,k=2
  i=0,k=2
k值是2,帮我解释解释为什么是2,而不是1啊
2012-06-17 11:10
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
得分:0 
回复 3楼 maoenlong
void func(int n)
{
    static Sample obj(n);
}

第一次调用这个函数func(1);的时候,发现obj还没有初始化,然后调用obj的构造函数,并把参数n传入。
第二次调用这个函数func(10);的时候,obj已经初始化了,所以你可以理解为static Sample obj(n);这行代码已经不存在了。

My life is brilliant
2012-06-17 12:09
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
得分:0 
回复 4楼 maoenlong
你创建一个CSample类的对象,就会使k增加1,因为你创建了两个CSample类的对象a,b那么,k的值就增加了2嘛。注意k是这个类的静态变量,那么它只占一份空间,所以不管你创建多少个CSample的对象,k都只有一个。

My life is brilliant
2012-06-17 12:16



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-371662-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.111838 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved