簡體   English   中英

成員函數中聲明的變量與成員變量相同

[英]variable declared in member function is same as member variable

想知道這是否行得通,以及如何:

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是一個const指針, this指針傳遞給類中的所有方法以表示當前實例。 當然,當您具有static成員函數時,不會傳遞它。

首先使用本地聲明的int i的原因是因為它與i++處於同一范圍,並return i

func1內部的變量引用int i = 0; (最接近i )。

在C ++中,將首先從相同/相鄰范圍中使用相同的名稱變量。

工作正常。 函數內部對名稱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

實際上,該返回將引用在func1()聲明的i 這都是關於范圍的。

范圍以{開頭,以}結尾。 僅當您在范圍內或進入另一個范圍時,才定義在范圍內聲明的所有變量。 因此

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

完全有可能。 如果您在范圍之一中使用i ,則將始終在同一范圍中引用i 引用范圍更大的i更加困難。

在您的示例中,您仍然可以使用this->i來引用頂部ithis是您正在使用的對象的指針。 是一些更多信息(向下滾動)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM