2013-03-19 107 views
0

知道這是否會工作,以及如何:變量是一樣的成員變量

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

的原因,我想問的是,因爲我有很多成員函數和壞的命名約定。

+0

範圍很重要。類作用域中的變量'i'與函數作用域中的不一樣。 – andre 2013-03-19 18:39:42

回答

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

0

func1內部的變量是指int i = 0;(最近的i)。

在C++中,相同的名稱變量將首先在相同/ nearset範圍內使用。

0

它工作正常。該函數內名稱爲i的所有用法均指該函數內聲明的i。也就是說,函數每次都會返回1。

2

當您說int i = 0時,您正在創建一個名爲i的新變量來隱藏類成員。如果你想訪問課程的i,你可以做this->i。但最好不要造成這種混亂。

1

func1的正文中,您將引用本地聲明的int i。爲了引用類的成員,則需要使用this指針明確地引用它:

this->i 

this是所有方法中一個類來表示當前實例傳遞一個const指針。當你擁有static成員函數時,它不會被傳入。

首先使用本地聲明的int i的原因是因爲它與i++return i的範圍相同。

0

你在func1()裏面的意圖是什麼。你想增加外部我還是我的功能內。如果你想讓外面的我增加,那麼這是行不通的。

0

該退貨實際上是指在func1()中聲明的i。這都是關於示波器的。

示波器以{開頭並以}結尾。在範圍內聲明的所有變量只會在您保留在範圍內或您進入另一個範圍時才被定義。因此,

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

是完全可能的。如果您在其中一個示波器中使用i,您將始終在相同範圍內參考i。要提到更高範圍的i比較困難。

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