2015-02-10 45 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; 
}