由于一些遗留的C代码,我有以下POD struct
定义2D坐标;以及从中继承的C ++ class
以提供各种操作:
struct coord
{
double x;
double y;
};
class CoordClass : public coord
{
// Contains functions like...
const CoordClass& operator+=(const CoordClass& rhs)
{
x += rhs.x;
y += rhs.y;
return *this;
}
double Magnitude() const { return std::sqrt(x*x + y*y); }
};
目前,CoordClass
定义了一个构造函数:
CoordClass(double xx, double yy) { x = xx; y = yy; }
鉴于x
和y
是POD基础struct coord
的成员,是否可以将该构造函数编写为初始化列表和空体?考虑C ++ 03和C ++ 11的答案让我感兴趣。
答案 0 :(得分:3)
在C ++ 11中,您可以提供以下构造函数:
CoordClass(double x, double y) : coord{x, y} {}
在C ++ 03中也可以获得一个空的构造函数体,但我认为不值得这样做:
CoordClass(double x, double y) : coord(make_coord(x, y)) {}
其中make_coord
是:
coord make_coord(double x, double y) {
coord c = { x, y };
return c;
}
它可以是private static
的{{1}}方法。或者,它可以是CoordClass
的自由函数和/或static
的匿名名称空间的成员。
答案 1 :(得分:1)
在C ++ 11中,如果为结构定义默认的默认构造函数,它仍然可以是C ++ 11中的POD。 (见Is this struct POD in C++11?)
struct coord
{
double x;
double y;
coord() = default;
coord(double xx, double yy) : x(xx), y(yy) {}
};
现在CoordClass构造函数变得简单了:
CoordClass(double x, double y) : coord(x, y) {}
答案 2 :(得分:0)
尝试以下
CoordClass(double xx, double yy) : coord { xx, yy } {}