c ++结构为私有数据成员

时间:2014-05-20 11:21:21

标签: c++ class struct cimg

我有一个使用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 ++中必需的点之前是结构吗?

2 个答案:

答案 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) 不,没有必要。