王金波ID:ggggqqqqihc
32021次访问,排名3507(-4)好友8人,关注者12
成就不高,玩心不小。
ggggqqqqihc的文章
原创 61 篇
翻译 1 篇
转载 2 篇
评论 17 篇
ggggqqqqihc的公告
最近评论
hzq3554055:正在看 号复杂
vvukqr:WoW Gold
henrywon:真的很爱你,这几天一直在找用php发邮件的代码,特别是mail函数,头都大,直到看到你的blog,一下载wordpress一拷贝过来,一测试就oK!太谢谢了!
minus:可以试试这个,可能更好些
http://blog.csdn.net/minus/archive/2008/06/25/2585996.aspx
tr:这不能怪老师,老师老师可能就是这么讲的
文章分类
收藏
相册
计算机相关
善用佳软(RSS)
我的其他Blog
明日会
深蓝色的空间
存档
订阅我的博客
XML聚合  FeedSky

原创 C++和Java搞混了收藏

新一篇: Turbo C++真令人失望 | 旧一篇: 利用标准库排序的几种方法

昨天把C++和Java里的对象构造机制搞混了。起因是一个程序的片段,用new构造一个数组。C++是会对每一个数组元素调用构造函数的,我想当然地以为Java也会这么做。但事实正与我想的相反。我写了一个Java程序测试了一下:
class Test 
{
    
public Test(){
        id
=getNextId();
        System.out.println(
"I am object "+id+".");
    }

    
private int getNextId(){
        
return nextId++;
    }

    
public static void main(String[] args) 
    
{
        Test test1
=new Test();
        Test test2
=new Test();
        Test[] testers
=new Test[4];
        System.out.println(testers[
1]);
    }

    
private static int nextId=1;
    
private int id;
}

设一个静态变量,这样可以方便的表示出每一个对象。这种方法是我测试时常用的。测试结果是test1和test2的构造函数执行了,但testers数组没有动静。随便找一个testers[1],结果还是null。刚才找来一本《Java编程思想》里有解释,说的是定义数组时只是声明了那么多的引用,并没有去生成对象。

但C++里就不同了:

class A{
public:
    A()
{
        id
=get_next_id();
        cout
<<"Object: "<<id<<" was born."<<endl;
    }

    
~A(){
        cout
<<"Object: "<<id<<" is dead."<<endl;
    }

    
int get_id();
private:
    
int get_next_id();
    
int id;
    
static int next_id;
}
;
int A::next_id=1;
int A::get_next_id(){
    
int id=next_id;
    
++next_id;
    
return id;
}

int A::get_id(){
    
return id;
}

int main(){
    A 
*arr=new A[3];
    delete[] arr;
    system(
"pause");
    
return 0;
}

输出结果:

Object: 1 was born.
Object: 2 was born.
Object: 3 was born.
Object: 3 is dead.
Object: 2 is dead.
Object: 1 is dead.

写这个C++片段时发生了一点波折。一开始我把那个静态变量在class里初始化了,结果编译器gcc给我来了个“error: ISO C++ forbids in-class initialization of non-const static member `next_id'”。瞎改了几下,没碰对,索性打开电脑上的《C++ Primer》,才想起来静态成员是在class外面初始化的,而且还要指明类型:
int A::next_id=1;

语言之间的细小差别的确挺让人郁闷。

发表于 @ 2007年08月10日 17:07:00|评论(loading...)|编辑|收藏

新一篇: Turbo C++真令人失望 | 旧一篇: 利用标准库排序的几种方法

评论

#atyuwen 发表于2007-10-09 18:16:06  IP: 202.114.12.*
这个问题我也遇到过。。。
发表评论  


登录
Csdn Blog version 3.1a
Copyright © ggggqqqqihc