标题:程序执行结果是多少??
只看楼主
风之舞鹤
Rank: 1
等 级:新手上路
帖 子:180
专家分:0
注 册:2007-6-2
 问题点数:0 回复次数:6 
程序执行结果是多少??
#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;
}
这个程序执行的结果是什么?为什么?
搜索更多相关主题的帖子: 结果 
2008-04-10 12:40
风之舞鹤
Rank: 1
等 级:新手上路
帖 子:180
专家分:0
注 册:2007-6-2
得分:0 
结果是1,为什么啊?谁能给个解释?

2008-04-10 12:52
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
得分:0 
其实这是设置默认构造函数的参数..当你不指定参数是就选择默认的.在这个题目中你不用参数obj和obj(n),结果都是一样的

[[it] 本帖最后由 sunkaidong 于 2008-4-10 13:10 编辑 [/it]]

学习需要安静。。海盗要重新来过。。
2008-04-10 13:09
风之舞鹤
Rank: 1
等 级:新手上路
帖 子:180
专家分:0
注 册:2007-6-2
得分:0 
[bo]以下是引用 [un]sunkaidong[/un] 在 2008-4-10 13:09 的发言:[/bo]
在这个题目中你不用参数obj和obj(n),结果都是一样的

但是如果用不带参数的构造函数,结果a就是就和构造函数里面的一样。为什么带参数的构造函数多a的值的改变没有影响?

2008-04-10 18:02
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
得分:0 
因为你把参数设置为a和static变量是重名字的...所以以局部为准..你可以换一下..换了就不一样了

学习需要安静。。海盗要重新来过。。
2008-04-10 18:22
gllovewyy
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-10-23
得分:0 
回复 5# 的帖子
构造函数的参数是局部定义的,不是class的域吧
2008-04-12 18:38
江湖贫侠
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2008-4-10
得分:0 
楼主可以看下这段程序,将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;
    }
2008-04-13 11:47



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-208174-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.145970 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved