他们让我实现一个通用多态性来打印长度,但我不知道如何做到。我认为多态性必须是多个类,但他们要求只有onw类的
#include <iostream>
using namespace std;
class Line {
private:
double x1, x2;
double y1, y2;
double z1, z2;
double length;
public:
Line(double a, double b, double c, double d, double e, double f):x1(a), x2(d), y1(b), y2(e), z1(c), z2(f){
length = sqrt(pow(x2-x1, 2) + pow(y2-y1, 2) + pow(z2-z1, 2));
}
~Line(){cout << endl << "destroying line";}
};
int main() {
Line line1(2,3,4,9,7,12);
Line line2(12,16,7,25,32,16);
Line line3(5,2,13,24,18,15);
}
要回答所问的问题,首先需要公开当前封装的length
,您可以在类的public:
部分添加一个函数:
auto get_length() const { return length; }
然后,您可以使用通用多态性来打印长度(您的"实现通用多态性",从字面上看(:
template <typename T>
void print_length(const T& t) {
std::cout << t.get_length() << 'n';
}
然后,您可以通过在main()
:的底部添加一些调用来证明它是有效的
print_length(line1);
print_length(line2);
print_length(line3);
尽管如此,也有可能他们并不是真的想要";通用的";多态性-不知道";通用的";倾向于使用模板来指代多态性,而我们只是期望这样的东西:
struct with_length {
virtual ~with_length() { }
virtual double get_length() const = 0;
};
class Line : with_length {
...
double get_length() const { return length; }
};