C++的问题。
C++的问题:假如在类中声明一个inta;再在全局声明一个inta;在类成员函数怎么来区别两个?...
C++的问题:假如在类中声明一个int a ;
再在全局声明一个int a;在类成员函数怎么来区别两个? 展开
再在全局声明一个int a;在类成员函数怎么来区别两个? 展开
5个回答
展开全部
如果int a 是一个局部变量,比如说在函数内部,void f(){ int a ;}
那么,这个a 的生存周期只有在调用void f时a 才出现,在离开f时,a自动被消除,除了void f中能使用a之外,任何编译单位都不能访问a
如果int a是一个全局变量,那么a被创建是在编译器执行的时候发生.a在本编译单位内的任何一个作用域内是可见的,为了与其他变量区分开,通常用::a区分开与其他的,诸如局部变量void f(){ int a ;},如果在void f()中使用全局变量a,就要使用::a,与局部变量a区分开,这时,::a是全局的,a是局部的.但如果void f()中没有局部变量a,直接使用a,就是那个全局的变量a
在类中定义一个成员data,都要有作用域指定.如:class A{
public:
int a ;
};
A::a就是A类中的一个成员a,或者:
A instance1;
instance1.a;
A* pi=&instance1;
pi->a;
那么,这个a 的生存周期只有在调用void f时a 才出现,在离开f时,a自动被消除,除了void f中能使用a之外,任何编译单位都不能访问a
如果int a是一个全局变量,那么a被创建是在编译器执行的时候发生.a在本编译单位内的任何一个作用域内是可见的,为了与其他变量区分开,通常用::a区分开与其他的,诸如局部变量void f(){ int a ;},如果在void f()中使用全局变量a,就要使用::a,与局部变量a区分开,这时,::a是全局的,a是局部的.但如果void f()中没有局部变量a,直接使用a,就是那个全局的变量a
在类中定义一个成员data,都要有作用域指定.如:class A{
public:
int a ;
};
A::a就是A类中的一个成员a,或者:
A instance1;
instance1.a;
A* pi=&instance1;
pi->a;
展开全部
作用范围不一样,你要是在类里面如果在成员函数里面更改的值是全局变量的(a不是类的私有成员),如果你类有一个私有成员,那么对a的更改是 改那个成员函数的 ,对全局变量没影响。总之,你记住是先执行小范围的变量改变。
你要是想安全点去区别,那就在类成员里面加上类名::a,如果类名是m,那么就写成m::a(::号是作用域符号,是管作用域的)
你要是想安全点去区别,那就在类成员里面加上类名::a,如果类名是m,那么就写成m::a(::号是作用域符号,是管作用域的)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
要访问一个不属于任何类的变量,可以在它的前面加上::就可以了。
但是我觉得你这样做不太好,因为编写类要实现高内聚性,低耦合,
但是你在成员函数使用全局变量,就违反了该规则,不太好
但是我觉得你这样做不太好,因为编写类要实现高内聚性,低耦合,
但是你在成员函数使用全局变量,就违反了该规则,不太好
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <iostream>
using namespace std;
int a;
class A
{
public:
void Fun1() //访问类的a
{
a = 10;
}
void Fun2()//访问全局变量a
{
::a = 10; //在变量前加::就是表示访问类外边的变量
}
int a;
};
int main()
{
return 0;
}
using namespace std;
int a;
class A
{
public:
void Fun1() //访问类的a
{
a = 10;
}
void Fun2()//访问全局变量a
{
::a = 10; //在变量前加::就是表示访问类外边的变量
}
int a;
};
int main()
{
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用作用域限定符啊'::'就是这个
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询