C++关于变量作用域的问题

一个程序classA{public:staticinta;voidinit(){a=1;}A(inta=2){init();a++;}};intA::a=0;Aobj;i... 一个程序
class A{
public:
static int a;
void init(){a=1;}
A(int a=2){init();a++;}
};
int A::a=0;
A obj;
int main()
{
cout<<obj.a;
return 0;
}
为什么输出的a是1 怎么样确定作用域,就是什么时候是作用于静态的a 什么时候作用于构造函数里面定义的参数a....头都晕了 求高人。。。

}
展开
 我来答
ul0402206
2012-09-04 · TA获得超过505个赞
知道小有建树答主
回答量:301
采纳率:0%
帮助的人:304万
展开全部
在声明对象obj时,系统调用构造函数
A(int a=2){init();a++;}
该构造函数的传入参数是int a =2
在函数内部先调用init()
该函数是将类的静态变量a赋值为1
而之后的a++则是对传入的参数a=2进行加1操作
为什么init没有对传入的参数a=2重新赋值呢?因为init不接受传入参数,对于init而言唯一可见的变量a只可能是A的静态成员变量
所以最终的结果是obj.a =1

这种东西只有在考试的时候才会出现,工作中写这样的代码一定给会被人骂的

我一直坚持机器读的懂的代码不一定是好代码,只有人能轻松读懂的代码才是优秀的代码
百度网友6bf1bee
2012-09-04 · TA获得超过239个赞
知道小有建树答主
回答量:244
采纳率:0%
帮助的人:97.3万
展开全部
首先我们从int A::a=0;看起,这儿你把静态成员变量赋值为1,我们记:A::a=1;
接着你定义了一个对象A obj;自然调用了A的构造函数:
A(int a=2)/*a是默认为2的参数整个构造函数中形参a屏蔽了静态变量static int A::a(除init()函数),所以里面的a是形参*/
{
init();
a++;
}

构造函数中调用了函数init();而init中的a是static int A::a,所以是1.
以上是本人猜想。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mia☆jiancha☆ce6608
2012-09-04 · TA获得超过1526个赞
知道小有建树答主
回答量:713
采纳率:100%
帮助的人:495万
展开全部
如果两个变量 同名 其中一个(1号)的作用域A在另一个(2号)的作用域B当中,那么在A用到的变量肯定都 是1号 优先使用自己作用域中的,不知道说的能不能理解,希望能帮助你
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式