2、设计一个点类 point,该类具有两个实数坐标。希望主程序使用这个类完成下述功能: (1)主程序为类 point 申请 10 个连续存储空间。 (2)要求调用一个函数 Set 从键盘输入 10个对象的属性,并顺序存入申请的内存中。 (3)要求调用一个函数 Display()显示 10 个对象的值。 (4)要求调用一个函数 Lenth(),计算将这些点连成一条折线时,这条折线的长度。 (5)程序结束时,删除申请的内存。 (6)獠示析构对象(动态对象或堆对象)的执行顺序。 设计这个类和各个函数并验证运算结果的正确性。
时间: 2023-05-26 10:03:59 浏览: 88
class point {
public:
point() {}
point(double x, double y) : x(x), y(y) {}
void set(double x, double y) { this->x = x; this->y = y; }
double getX() const { return x; }
double getY() const { return y; }
private:
double x = 0, y = 0;
};
void Set(point* p) {
for (int i = 0; i < 10; i++) {
double x, y;
cin >> x >> y;
p[i].set(x, y);
}
}
void Display(const point* p) {
for (int i = 0; i < 10; i++) {
cout << "(" << p[i].getX() << ", " << p[i].getY() << ")" << endl;
}
}
double Length(const point* p) {
double length = 0;
for (int i = 0; i < 9; i++) {
double dx = p[i+1].getX() - p[i].getX();
double dy = p[i+1].getY() - p[i].getY();
length += sqrt(dx * dx + dy * dy);
}
return length;
}
int main() {
point* p = new point[10];
Set(p);
Display(p);
cout << "Length: " << Length(p) << endl;
delete[] p;
return 0;
}
析构对象的执行顺序:当 delete[] p; 执行时,会调用 point 类的析构函数来释放内存,释放顺序是从最后一个分配的对象开始,到第一个分配的对象结束。在本例中,释放顺序是从 p[9] 到 p[0]。
阅读全文