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

程序执行结果是多少??

风之舞鹤 发布于 2008-04-10 12:40, 706 次点击
#include<iostream.h>
class A
{
public:
 static int a;
void init()
{
 a=1;
}
A(int a=2)
{

init();
a++;
}

};
int A::a=0;
main()
{
A obj;
cout<<obj.a<<endl;
}
这个程序执行的结果是什么?为什么?
6 回复
#2
风之舞鹤2008-04-10 12:52
结果是1,为什么啊?谁能给个解释?
#3
sunkaidong2008-04-10 13:09
其实这是设置默认构造函数的参数..当你不指定参数是就选择默认的.在这个题目中你不用参数obj和obj(n),结果都是一样的

[[it] 本帖最后由 sunkaidong 于 2008-4-10 13:10 编辑 [/it]]
#4
风之舞鹤2008-04-10 18:02
[bo]以下是引用 [un]sunkaidong[/un] 在 2008-4-10 13:09 的发言:[/bo]
在这个题目中你不用参数obj和obj(n),结果都是一样的

但是如果用不带参数的构造函数,结果a就是就和构造函数里面的一样。为什么带参数的构造函数多a的值的改变没有影响?
#5
sunkaidong2008-04-10 18:22
因为你把参数设置为a和static变量是重名字的...所以以局部为准..你可以换一下..换了就不一样了
#6
gllovewyy2008-04-12 18:38
回复 5# 的帖子
构造函数的参数是局部定义的,不是class的域吧
#7
江湖贫侠2008-04-13 11:47
楼主可以看下这段程序,将a改成b,结果仍然相同,所以变量重名以局部为准。其实用调试工具可以很容易发现两个a的不同,一个是a,会变大;一个是this->a,保持不变
class A
{
public:
    static int a;
    void init()
    {
        a=1;
    }
    A(int b=2)
    {

        init();
        b++;
    }

};

int A::a=0;
    main()
    {
        A obj;
        cout<<obj.a<<endl;
    }
1