Chinaunix

标题: [请教]这个程序为什么会输出1-1000? [打印本页]

作者: jeanlove    时间: 2008-12-17 09:44
标题: [请教]这个程序为什么会输出1-1000?
刚刚在CU上看到的一道面试题的讨论,说是不用if不用循环不用递归打印1-1000这一千个数字。有位给出了个c++方案

#include<stdio.h>
typedef struct _test{
  static int a;
  _test(){
    printf("%d\n",a);
    a++;
  }
}Test;
int Test::a = 1;
int main() {
  Test tt[1000]; return 0;
}

运行结果是正确的,但是我百思不得解,为什么它能输出1-1000呢? 我用gdb跟进去看,构造函数不断的被调用着。为什么?

求dx给个解释,10分感谢!
作者: 5毛党党员    时间: 2008-12-17 09:44
原帖由 jeanlove 于 2008-12-17 09:44 发表
刚刚在CU上看到的一道面试题的讨论,说是不用if不用循环不用递归打印1-1000这一千个数字。有位给出了个c++方案

#include
typedef struct _test{
  static int a;
  _test(){
    printf("%d\n",a);
    ...

Test tt[1000];

不就是1000个Test对象吗?当然要一个一个构造了。。。

static int a是属于整个类的,每构造一次Test , a 都会被+1

使用类的静态成员一定要注意 int Test::a = 1;

[ 本帖最后由 5毛党党员 于 2008-12-17 09:57 编辑 ]
作者: FuriousFive    时间: 2008-12-17 09:48
是啊
作者: zhangxudong    时间: 2008-12-17 09:49
1. Test tt[1000];// 这行语句会调用_test的构造函数_test() 1000次
2. static int a;  // a 是类_test的静态成员,没调用一次_test(),就打印a然后a加1
作者: ynchnluiti    时间: 2008-12-17 09:53
静态成员是属于整个类的。构造新的对像时,a的值能在上一次值的基础上加1。
作者: jeanlove    时间: 2008-12-17 10:06
原帖由 5毛党党员 于 2008-12-17 09:46 发表

Test tt[1000];

不就是1000个Test对象吗?当然要一个一个构造了。。。

static int a是属于整个类的,每构造一次Test , a 都会被+1

使用类的静态成员一定要注意 int Test::a = 1;

谢谢!
作者: 雨过白鹭洲    时间: 2008-12-17 12:33
面试题总是这样莫名其妙。。。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2