0

假设我有课:

class foobar {
public:
    foobar(int _x, int _y) {
        x = _x;
        y = _y;
    }
    int x, y;
};

有没有办法将 x 和 y 分配给传递给 foobar(int, int) 而不是自己分配的值?

[答案] 初始化列表是我需要使用的(感谢大家澄清)

我可以这样编写代码:

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

这意味着我不必强调我的输入参数,或者 x(x) 将按预期工作

4

2 回答 2

3

您可以使用成员初始化列表。这仍然是您的工作,但这是一种更好的做法:

foobar(int _x, int _y): x(_x), y(_y) {
//                    ^^^^^^^^^^^^^^
}

如果您真的不想分配这些值,您可以使用没有构造函数的类(聚合类)初始化这些成员:

class foo
{
public:
    int x, y;
};
foo{1, 2}; // <= Braces initialization

工作示例:http: //ideone.com/NlbkKb

于 2013-09-24T07:55:20.827 回答
3

如果您的类是一个聚合,您可以使用大括号语法对其进行初始化:

class foobar
{
public:
    int x;
    int y;
};

foobar f { 1, 2 };

否则,您应该在构造函数中初始化元素:

class foobar
{
public:
    foobar(int x_, int y_) : x(x_), y(y_)  {  }
private:
    int x;
    int y;
};

foobar f(1, 2);

(您也可以在第二种情况下使用大括号语法。)

于 2013-09-24T07:56:30.860 回答