0

想知道这是否可行,以及如何:

class sample
{
 int i;
 int func1()
  {
   int i = 0;
   i++;
   return i;
  }
}

我问的原因是因为我有很多成员函数和错误的名称约定。

4

6 回答 6

2

当您说int i = 0您正在创建一个名为i隐藏类成员的新变量时。如果你想访问类的i,你可以做this->i。但通常最好不要一开始就引起这种混乱。

于 2013-03-19T18:39:11.963 回答
1

在 的主体内func1,您将引用本地声明的int i. 为了引用类成员,您需要使用this指针显式引用它:

this->i

this是一个常量指针,传递给类中的所有方法以表示当前实例。当然,当您有static成员函数时,它不会传入。

首先使用本地声明的原因int i是因为它与 and 处于相同的范围i++return i

于 2013-03-19T18:39:20.480 回答
0

它工作正常。函数内部名称的所有使用均i指该函数i内部声明的名称。也就是说,该函数每次都会返回 1。

于 2013-03-19T18:39:04.790 回答
0

你在 func1() 中对 i 的意图是什么。你想增加函数外部的 i 还是函数内部的 i。如果您希望外部 i 增加,那么这将不起作用。

于 2013-03-19T18:40:46.417 回答
0

范围变得很奇怪:

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类中的。

于 2013-03-19T18:42:36.867 回答
0

return 实际上将引用 in 中i声明的内容func1()。这都是关于范围的。

范围以 开头{和结尾}。在一个范围内声明的所有变量只有在您停留在该范围内或进入另一个范围内时才会被定义。因此

{ int i = 0; { int i = 1; { int i = 2; }}}

完全有可能。如果您i在其中一个范围内使用,您将始终i在同一范围内引用。指代i更高范围的更困难。

在您的示例中,您仍然可以i使用 来引用顶部this->i,其中this是指向您正在使用的对象的指针。是更多信息(向下滚动)。

于 2013-03-19T18:50:58.533 回答