我正在尋找一種方法來使方法調用中存在一個保持值的int變量。從這個角度來看,一個班級成員會很好。C++全局變量只能用一種方法更改,可能嗎?
但我想這個int變量只能在一個特定的方法中改變。
我該怎麼做?
我艱難約
void MyClass::my_method(){
static int var = 0;
var++;
}
但是,我想var = 0;
僅被第一次執行。
我正在尋找一種方法來使方法調用中存在一個保持值的int變量。從這個角度來看,一個班級成員會很好。C++全局變量只能用一種方法更改,可能嗎?
但我想這個int變量只能在一個特定的方法中改變。
我該怎麼做?
我艱難約
void MyClass::my_method(){
static int var = 0;
var++;
}
但是,我想var = 0;
僅被第一次執行。
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;
};
VAR只是局部,如果你想,要成爲0第一次函數返回使其初始化 - 1或者如果0是正確的你沒事。由於var只在my_method中可見,所以如果您希望所有類都可見,則必須將其放在外面,並僅使用my_method來修改該值。
您可以使用以下鍵訪問模式:
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
}
這種方式被宣佈在包裝類Var
的朋友可以改變它的私有成員變量的Foo
只有成員函數(例如, var.i
)。
我還沒有足夠的代表評論,但你應該注意到,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.
,因爲它是'var'只初始化一次 – vu1p3n0x
你的代碼不正是你想要的(初始化變量一次)。問題是什麼? – SergeyA
1.這不是一個類的方法,2。我想你應該考慮重新設計(多線程等) –