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

为什么两个输出不一样啊!!

shenyulv 发布于 2009-12-20 13:26, 1098 次点击
#include "iostream"
using namespace std;
class Myclass
{
public:
    int number;
    void set(int i);
};
int number=30;
void Myclass::set(int i)
{
    number=i;
}
void main()
{
    Myclass my1;
    int number=20;
    my1.set(25);
    cout<<my1.number<<endl;  //输出25
    my1.set(::number);  //有这种函数表示法啊
    cout<<my1.number;  //输出30?
}
11 回复
#2
lintaoyn2009-12-20 13:54
::number 全局名字空间中的number;
primer C++ 中有提到
#3
shenyulv2009-12-20 14:10
谢谢咯
#4
英英2009-12-20 14:28
my1.set(25)传入的参数是25,而my1.set(::number)传入的是::number,也就是全局变量,而它的赋值是通过int number=30实现的,也就是说此时实际传入的是30
#5
shenyulv2009-12-20 14:32
以下是引用英英在2009-12-20 14:28:59的发言:

my1.set(25)传入的参数是25,而my1.set(::number)传入的是::number,也就是全局变量,而它的赋值是通过int number=30实现的,也就是说此时实际传入的是30
那么在主函数中 有定义了
int number=20 就没用了吗?
#6
无水之冰2009-12-20 22:39
没用,因为它是一个局部变量。如果在int number=20;的下面有my1.set(number);的话则用到了,就有意义了。
#7
shenyulv2009-12-21 13:14
以下是引用无水之冰在2009-12-20 22:39:58的发言:

没用,因为它是一个局部变量。如果在int number=20;的下面有my1.set(number);的话则用到了,就有意义了。
恩,理解了,谢谢咯
#8
ymzhaojian2009-12-26 08:56
楼上说的对!!!
#9
shiyuehai2009-12-26 16:26
我得去借本primer C++ 来看下了,不过看不到英文的,只得看中文的拉
#10
guchao20092009-12-26 17:55
::number全局变量
#11
wlsj2009-12-26 21:41
菜鸟,学习中。。。。。。。。。
#12
pangding2009-12-27 13:30
域的概念有点事后诸葛的感觉,是为了解决重名而使用的机制。
最好的方法是尽量使用有意义的名字,而避免重名。而不是发现重名之后使用这种好像七拼八凑的方法让程序能用。
1