c++ - 我如何委托这个构造函数?
问题描述
对于 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++ 实践(自 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) {}
然后你就不需要= 0
forx
和y
。
推荐阅读
- javascript - 重定向 URL 不适用于 Vue-MSAL
- r - R:ALTREP 可以为 Rcpp::XPtr 定义序列化程序吗?
- python - 如果没有参数或没有第二个参数,则 ctx.send 没有参数
- c++ - 使用 std::enable_if 重载 std::unique_ptr 删除器方法
- go - gorm:稍后获取关系(不预加载)
- xstream - 如何使用 XStream 在某些标签中选择一些信息
- html - 在表单字段中使用 jQuery 删除逗号和点?
- python - Pandas 从第一个元素嵌套列表中赋值
- tcl - 从 TCL 变量中获取值
- file - 如何上传多个文件并从 Formsubmit 中取回它们?