因为你定义的对象c为static(静态的),静态变量只定义一次,也就是说你调用fn(30)时根本没有新对象生成,那么自然不会输出hello了;
可这样验证:
#include <iostream.h>
class sample
{
public:
sample()
{
i=0;
//初始化i=0;
cout<<"hello"<<endl;
}
void Add(){i++;cout<<"i="<<i<<endl;}
//i自增1,并输出;
private:
int i;
};
void fn(int i)
{
static sample c;
c.Add ();
//调用Add();
cout<<"j="<<i<<endl;
}
void main()
{
fn(20);
fn(30);
}
结果:
hello
i=1
j=20
i=2
//若生成新对象,则此处i应为1!!
j=30
表明两次都是对同一对象中的i操作,若去掉static关键子则有两个hello输出;