c++编程代码差错:#include <iostream>#include <cmath>using namespace std;class Point {public: Point(double x, double y) : x(x), y(y) {} virtual ~Point() {} double getX() const { return x; } double getY() const { return y; }private: double x; double y;};class Circle : public Point {public: Circle(double x, double y, double radius) : Point(x, y), radius(radius) {} virtual ~Circle() {} double getRadius() const { return radius; } double getArea() const { return M_PI * radius * radius; }private: double radius;};int main() { Circle c(1.0, 2.0, 3.0); cout << "Circle with center (" << c.getX() << ", " << c.getY() << ") and radius " << c.getRadius() << endl; cout << "Area: " << c.getArea() << endl; return 0;}
时间: 2024-01-07 22:03:09 浏览: 116
这段代码存在一个错误,即 Circle 类继承了 Point 类,但是我们知道 Circle 不应该是 Point 的子类,因为 Circle 拥有的属性和方法 Point 并没有。正确的做法是使用组合,即在 Circle 类中包含一个 Point 类型的对象。
以下是修改后的代码:
```
#include <iostream>
#include <cmath>
using namespace std;
class Point {
public:
Point(double x, double y) : x(x), y(y) {}
virtual ~Point() {}
double getX() const { return x; }
double getY() const { return y; }
private:
double x;
double y;
};
class Circle {
public:
Circle(double x, double y, double radius) : center(x, y), radius(radius) {}
virtual ~Circle() {}
double getRadius() const { return radius; }
double getArea() const { return M_PI * radius * radius; }
Point getCenter() const { return center; }
private:
Point center;
double radius;
};
int main() {
Circle c(1.0, 2.0, 3.0);
cout << "Circle with center (" << c.getCenter().getX() << ", " << c.getCenter().getY() << ") and radius " << c.getRadius() << endl;
cout << "Area: " << c.getArea() << endl;
return 0;
}
```
修改后的代码使用了组合,Circle 类包含了一个 Point 对象 center,这样 Circle 就拥有了自己的属性和方法。在 main 函数中,我们可以通过调用 getCenter 函数来获取 Circle 对象的中心坐标。
阅读全文