首页 > 解决方案 > 我如何委托这个构造函数?

问题描述

对于 c++ 作业,我需要使用 Point 类,并且使用该 Point 类我需要创建一个 Triangle 类。

我为 Point 类使用了以下构造函数:

//constructor 1
Point() 
{
    x = 0;
    y = 0;
}

//constructor 2
Point(double i, double j)
{ 
    x = i; 
    y = j;
}

我的三角形类的第一个构造函数是:

  Triangle()
    {
        a = Point();
        b = Point();
        c = Point();
    }

现在下一步是:

创建一个接受三个 Point 参数并使用三个参数初始化属性 a、b 和 c 的构造函数。使用构造函数委托来初始化属性。

我读到您需要使用构造函数委托来将已经完成的工作委托给新构造函数,以防止重写代码。

  Triangle(Point a, Point b, Point c)
        {
         
        }

我是初学者,我发现很难用已经存在的课程创建一个新课程。我能否获得有关如何委派此构造函数的反馈?

蒂姆

标签: c++object

解决方案


这是您的代码的略微重构版本,它反映了更现代的 C++ 实践(自 2011 年以来):

struct Point {
    Point() = default;
    Point(double i, double j) : x(i), y(j) {}

    double x = 0;
    double y = 0;
};

struct Triangle {
    Triangle() = default;
    Triangle(Point i, Point j, Point k) : a(i), b(j), c(k) {}

    Point a, b, c;
};

这确实使用了您提到的“构造函数委托”功能,因为这适用于调用同一类的其他构造函数的构造函数。它使用初始化列表和类成员初始化器 ( = 0) 来使代码更加简洁和惯用(通过能够使用= default默认构造函数的声明,而不必自己编写它们)。

如果你真的想为 使用构造函数委托Point,你可以像这样编写默认构造函数:

Point() : Point(0, 0) {}

然后你就不需要= 0forxy


推荐阅读