想知道这是否可行,以及如何:
class sample
{
int i;
int func1()
{
int i = 0;
i++;
return i;
}
}
我问的原因是因为我有很多成员函数和错误的名称约定。
想知道这是否可行,以及如何:
class sample
{
int i;
int func1()
{
int i = 0;
i++;
return i;
}
}
我问的原因是因为我有很多成员函数和错误的名称约定。
当您说int i = 0
您正在创建一个名为i
隐藏类成员的新变量时。如果你想访问类的i
,你可以做this->i
。但通常最好不要一开始就引起这种混乱。
在 的主体内func1
,您将引用本地声明的int i
. 为了引用类成员,您需要使用this
指针显式引用它:
this->i
this
是一个常量指针,传递给类中的所有方法以表示当前实例。当然,当您有static
成员函数时,它不会传入。
首先使用本地声明的原因int i
是因为它与 and 处于相同的范围i++
内return i
。
它工作正常。函数内部名称的所有使用均i
指该函数i
内部声明的名称。也就是说,该函数每次都会返回 1。
你在 func1() 中对 i 的意图是什么。你想增加函数外部的 i 还是函数内部的 i。如果您希望外部 i 增加,那么这将不起作用。
范围变得很奇怪:
int func1()
{
int i = 0;
i++;
{ //1
int i = 41;
i++;
}
{ //2
int j = i + 1;
cout << j << endl // this prints 2
}
return i;
}
在作用域中使用变量时的规则是,它总是首先引用最局部的作用域并向上工作。所以在你的例子中,i
你的函数内部不会引用i
类中的。
return 实际上将引用 in 中i
声明的内容func1()
。这都是关于范围的。
范围以 开头{
和结尾}
。在一个范围内声明的所有变量只有在您停留在该范围内或进入另一个范围内时才会被定义。因此
{ int i = 0; { int i = 1; { int i = 2; }}}
完全有可能。如果您i
在其中一个范围内使用,您将始终i
在同一范围内引用。指代i
更高范围的更困难。
在您的示例中,您仍然可以i
使用 来引用顶部this->i
,其中this
是指向您正在使用的对象的指针。这是更多信息(向下滚动)。