gpt4 book ai didi

c++ - `print` 具有两个不同构造函数的对象的函数

转载 作者:行者123 更新时间:2023-11-30 01:47:52 25 4
gpt4 key购买 nike

我有一个类 Line 有两个不同的构造函数:

// constructor - two points
Line::Line(Point& p1l, Point& p2l)
: p1(p1l), p2(p2l) {}

// constructor - point and vector
Line::Line(Point& pl, Vector& dirvec)
: p(pl), v(dirvec) {}

现在我正在尝试实现一个print 函数,但遇到了问题。因为有两个具有两组不同参数的构造函数,所以我需要提前知道调用了哪个构造函数来创建我尝试打印的 Line。但我不知道如何检查它。构造函数的参数是其他类的对象,它们有自己的print函数。

// print function
void Line::print() const {
cout << "Line[";
p1.print();
cout << ", ";
if (p2) {
p2.print();
}
else if (v) {
v.print();
}

cout << "]";
}

我试图直接检查构造函数的参数是否存在,但它不能那样工作 - 我需要在 print 函数中初始化一个对象,这是错误的逻辑。

实现这种打印功能的最佳方式是什么?

最佳答案

看起来你的类有四个字段:p1p2 用于第一个构造函数,pv第二个。

这种方法很糟糕,因为每次操作未初始化字段时都应该消除歧义(不仅在 print 函数中,而且每次)。

我建议您选择以下解决方案之一:

按住开始结束点。

你必须像下面这样改变你的构造函数:

Line::Line(const Point& start, const Point& end)
: start_(start), end_(end) {}

// constructor - point and vector
// You should implement operator+ (or a method) for vector and point.
Line::Line(Point& start, Vector& direction)
: start_(start), end_(start + direction) {}

按住起点点和方向 vector :

// Point - Point should return a Vector. Or you could implement a Vector(Point, Point)
Line::Line(const Point& start, const Point& end)
: start_(start), direction_(end - start) {}

Line::Line(Point& start, Vector& direction)
: start_(start), direction_(direction) {}

关于c++ - `print` 具有两个不同构造函数的对象的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31067951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com