这就是我所拥有的:
class Vector3 {
private:
float x;
float y;
float z;
public:
Vector3(float x = 0, float y = 0, float z = 0) {
this->x = x;
this->y = y;
this->z = z;
}
...
};
我发现
this->something = something
非常重复。
我只是想用一次参数构造 Vector3 和
然后不再访问这些字段,只需使用方法添加 Vector3 的。
有什么方法可以简化构造函数而不必做
this->something = something
?
或者有什么方法可以“密封”字段?
使用聚合类。那真的是唯一的选择。这不是 good 替代品,但它是唯一的替代品。
struct Vector3 {
float x = 0;
float y = 0;
float z = 0;
};
class Vector3Thing {
private:
Vector3 vec;
public:
Vector3Thing(Vector3 vec_) : vec(vec_) {}
...
};
使用 std::array 和 std::initializer_list。
class Vector3
{
enum elem
{
x,
y,
z,
cnt
};
std::array<float, cnt> vec;
public:
Vector3(const std::initializer_list<float>& list = {0.f,0.f,0.f})
{
int i = 0;
for (const auto& e : list)
vec[i++] = e;
}
float get_x() { return vec[x]; }
float set_x(float data) { vec[x] = data; }
};
可以这样用
Vector3 a = { 1.f,2.f,3.f };
Vector3 b{ 1.f,2.f,3.f };
有什么方法可以简化构造函数,使其不必执行此操作->某事=某事?
您可以使用member initializer list来初始化数据成员:
class Vector3 {
private:
float x;
float y;
float z;
public:
Vector3(float x = 0, float y = 0, float z = 0): x(x), y(y), z(z)
{
}
...
};