我有一个使用CImg库的项目。我要做的是声明从名为shape的抽象基类继承的类。这些类是不同形状的类(圆形,矩形等)。我想要做的是使用一个名为point的结构类来表示每个类所需的不同点。因此,例如,对于三角形形状,我必须使用三个点来绘制三角形,每个点具有x坐标和y坐标。所以这就是我到目前为止所做的。
class Shape
{
public:
virtual void draw_shape() = 0;
virtual double area() = 0;
};
struct Point
{
const int x; //const is necessary because CImg drawing functions require them.
const int y;
};
class Triangle : public Shape
{
private:
struct Point first;
struct Point second;
struct Point third;
public:
Triangle();
Triangle(const int, const int, const int, const int, const int, const int);
virtual void draw_shape();
virtual double area();
};
1)如何初始化每个结构的x坐标和y坐标?
Triangle::Triangle() : first.x(0), first.y(0), second.x(0), second.y(0), third.x(0), third.y(0)
不起作用
2)我的重载构造函数是否正确,或者我应该使用此构造函数:
Triangle(Point, Point, Point);
3)每当我想画画时,我如何使用积分? 4)在实例化c ++中必需的点之前是结构吗?
答案 0 :(得分:1)
您可以调用积分的构造函数,如下所示:
Triangle() : first{0, 0}, second{0, 0}, third{0, 0} {}
如果你想做一些更复杂的事情,你可以自己添加一个显式的构造函数:
struct Point
{
int x;
int y;
Point(int a, int b) : x(a), y(b) { /* ... */ }
};
答案 1 :(得分:1)
考虑1)
你可以简单地使用它:
Triangle::Triangle() : first{0,0}, second{0,0}, third{0,0} {}
考虑2) 我认为是构造函数
Triangle(Point, Point, Point);
更好。当你已经有积分时,为什么不使用积分?
考虑3) 依赖于如何绘制事物
考虑4) 不,没有必要。