注册 登录
编程论坛 C++教室

执行过程

maoenlong 发布于 2012-06-16 21:45, 352 次点击
#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
具体是怎样运行的,执行过程麻烦高手讲解一下
5 回复
#2
lz10919149992012-06-16 22:06
obj只会在第一次调用func的时候初始化一次,所以func(10);其实什么都没做。
#3
maoenlong2012-06-17 10:08
obj是对象名吗?obj是怎样调用func函数的,主函数实参传给形参然后怎样执行啊。
#4
maoenlong2012-06-17 11:10
#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啊
#5
lz10919149992012-06-17 12:09
回复 3楼 maoenlong
void func(int n)
{
    static Sample obj(n);
}

第一次调用这个函数func(1);的时候,发现obj还没有初始化,然后调用obj的构造函数,并把参数n传入。
第二次调用这个函数func(10);的时候,obj已经初始化了,所以你可以理解为static Sample obj(n);这行代码已经不存在了。
#6
lz10919149992012-06-17 12:16
回复 4楼 maoenlong
你创建一个CSample类的对象,就会使k增加1,因为你创建了两个CSample类的对象a,b那么,k的值就增加了2嘛。注意k是这个类的静态变量,那么它只占一份空间,所以不管你创建多少个CSample的对象,k都只有一个。
1