2016-05-31 11 views
0

我正在尋找一種方法來使方法調用中存在一個保持值的int變量。從這個角度來看,一個班級成員會很好。C++全局變量只能用一種方法更改,可能嗎?

但我想這個int變量只能在一個特定的方法中改變。

我該怎麼做?

我艱難約

void MyClass::my_method(){ 
    static int var = 0; 
    var++; 
} 

但是,我想var = 0;僅被第一次執行。

+4

,因爲它是'var'只初始化一次 – vu1p3n0x

+9

你的代碼不正是你想要的(初始化變量一次)。問題是什麼? – SergeyA

+1

1.這不是一個類的方法,2。我想你應該考慮重新設計(多線程等) –

回答

2
void my_method(){ 
    static int var; 
    var++; 
} 

這裏的問題是,

static int var; 

只有在my_method()局部範圍內可見。

你可以把它僅僅由變量的定義全球的my_method()外:

int var; 
void my_method() { 
    var++; 
} 

var會爲大家可見。


更好的方法是將所有的封裝成一個類:

class MyClass { 
public: 
    static void my_method() { 
     var++; 
    } 
private: 
    static int var = 0; 
}; 
0

VAR只是局部,如果你想,要成爲0第一次函數返回使其初始化 - 1或者如果0是正確的你沒事。由於var只在my_method中可見,所以如果您希望所有類都可見,則必須將其放在外面,並僅使用my_method來修改該值。

2

您可以使用以下鍵訪問模式:

struct Foo { 
    void fun1(); 
    void fun2(); 

    static class Var { 
    friend void Foo::fun1(); 
    int i = 0; 
    public: 
    int value() const { return i; } 
    } var; 
}; 

Foo::Var Foo::var; 

void Foo::fun1() { var.i = 42; } 

void Foo::fun2() { 
    // var.i = 42; // this will generate compile error cause fun2 doesn't have to var 
} 

Live Demo

這種方式被宣佈在包裝類Var的朋友可以改變它的私有成員變量的Foo只有成員函數(例如, var.i)。

0

我還沒有足夠的代表評論,但你應該注意到,Static不等於Constant。

靜態變量爲類的所有實例維護其值,而常量變量對於類的每個實例(對象)可以具有不同的值。

請參閱此問題以獲得更深入的解釋。 What is the difference between a static and const variable?

要直接回答你的問題,你不能有一個真正的「全局」可放大,只能從一個類編輯。相反,您應該考慮πάνταῥεῖ的答案,或者等到知道了您想要分配給它的值之後再聲明該常量。舉例來說,我想X + 10存儲到常數變量Y

int x = 5 //create variable 

//Do whatever you need to do to get the value 
function myFunction(){ 
    x = x + 10; 
} 

const int y = x; //now Y = 15 and cannot be changed.