所以這個問題可能是重複的,但是當我搜索我什麼也沒找到。因此,在C++,如果我有如何設置對象數據成員與此C++與此
class Foo{
public:
int x;
int y;
Foo(int x, int y);
};
和
Foo(int xIn, int yIn){
x = xIn;
y = yIn;
}
不是有沒有辦法做this
分配?所以你不必改變被傳入的變量的名字?
所以這個問題可能是重複的,但是當我搜索我什麼也沒找到。因此,在C++,如果我有如何設置對象數據成員與此C++與此
class Foo{
public:
int x;
int y;
Foo(int x, int y);
};
和
Foo(int xIn, int yIn){
x = xIn;
y = yIn;
}
不是有沒有辦法做this
分配?所以你不必改變被傳入的變量的名字?
是的,有:
Foo(int x, int y) {
this->x = x;
this->y = y;
}
這裏x
和y
隱藏的成員變量,但是你可以用this->x
和this->y
訪問它們。
的慣用方法是使用初始化列表:
Foo(int x, int y) : x(x), y(y) {}
當然,如果出於某種原因,你要訪問的隱藏數據成員在構造函數的身體,你可以使用this
指針:
Foo(int x, int y) {
this->x = x;
....
在C++ 11,做到這一點的優選方法是
class Foo{
int x;
int y;
public:
Foo(int x, int y): x{x}, y{y}{}
};
還是傳統的方式,
class Foo{
int x;
int y;
public:
Foo(int x, int y): x(x), y(y){}
};
如果你想觀察範圍規則,也保持清晰,你可以隨時使用類範圍內操作,而分配變量
class Foo{
public:
int x;
int y;
Foo(int x, int y);
};
Foo(int x, int y) {
Foo::x = x;
Foo::y = y;
}
什麼是兩者的區別:{ x}和(x)?空{}在最後表示什麼? – 2015-02-10 21:09:48
結束{}是函數體(空)。初始化{}和()之間的區別可以在http://stackoverflow.com/questions/24307913/c11-difference-in-constructors-braces – 2015-02-10 21:12:12
找到另外一個問題,我使用一個單獨的頭文件,它有所有我的函數原型以及.cpp文件。所以從你的例子看來,我會在頭中做'Foo(int x,int y)...',這是否正確?然後我必須在.cpp文件中做任何事情嗎? – 2015-02-10 21:22:05