所以这个问题可能是重复的,但是当我搜索我什么也没找到。因此,在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