2015-02-10 48 views
1

所以這個問題可能是重複的,但是當我搜索我什麼也沒找到。因此,在C++,如果我有如何設置對象數據成員與此C++與此

class Foo{ 
    public: 
     int x; 
     int y; 
     Foo(int x, int y); 
}; 

Foo(int xIn, int yIn){ 
    x = xIn; 
    y = yIn; 
} 

不是有沒有辦法做this分配?所以你不必改變被傳入的變量的名字?

回答

6

是的,有:

Foo(int x, int y) { 
    this->x = x; 
    this->y = y; 
} 

這裏xy隱藏的成員變量,但是你可以用this->xthis->y訪問它們。

2

的慣用方法是使用初始化列表:

Foo(int x, int y) : x(x), y(y) {} 

當然,如果出於某種原因,你要訪問的隱藏數據成員在構造函數的身體,你可以使用this指針:

Foo(int x, int y) { 
    this->x = x; 
    .... 
1

在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){} 
}; 
+0

什麼是兩者的區別:{ x}和(x)?空{}在最後表示什麼? – 2015-02-10 21:09:48

+0

結束{}是函數體(空)。初始化{}和()之間的區別可以在http://stackoverflow.com/questions/24307913/c11-difference-in-constructors-braces – 2015-02-10 21:12:12

+0

找到另外一個問題,我使用一個單獨的頭文件,它有所有我的函數原型以及.cpp文件。所以從你的例子看來,我會在頭中做'Foo(int x,int y)...',這是否正確?然後我必須在.cpp文件中做任何事情嗎? – 2015-02-10 21:22:05

1

如果你想觀察範圍規則,也保持清晰,你可以隨時使用類範圍內操作,而分配變量

class Foo{ 
public: 
    int x; 
    int y; 
    Foo(int x, int y); 
}; 

Foo(int x, int y) { 
    Foo::x = x; 
    Foo::y = y; 
}