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

有个程序看不明,求救!!

wujingqian 发布于 2008-03-18 21:28, 725 次点击
#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?
7 回复
#2
key_04232008-03-18 22:20
static声明的是静态局部变量,在函数调用结束后不会消失而保留原值,在下一次该函数调用时,该变量保留上一次函数调用结束时的值。
对于这个程序:
CSample a,b;
创建了2个对象,第一次创建a时,调用构造函数CSample::CSample(),使得i=0;k=1;
               第二次创建a时,调用构造函数CSample::CSample(),i重新初始化为0,k在1的基础上加1,使得i=0;k=2;
————————————————————————————————————————————
代码有点小问题,改之后是:
#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();
}
#3
sunkaidong2008-03-18 22:22
楼上沙发被你坐了..呵呵..他的大小写有问题..
#4
wujingqian2008-03-18 22:32
哦 ,明了,谢谢
#5
key_04232008-03-18 22:37
[bo]以下是引用 [un]sunkaidong[/un] 在 2008-3-18 22:22 的发言:[/bo]

楼上沙发被你坐了..呵呵..他的大小写有问题..

恩 ^_^
第一个沙发
#6
key_04232008-03-18 22:38
不客气,大家互相学习~
#7
a198705022008-03-19 19:14
k的默认值是0?
#8
b003_xinkai2008-03-19 21:31
全局变量,你没创建一个对象,构造函数都会调用一次,所以。K是2,
1