#include<iostream> #include<string> using namespace std; //点和圆关系 //圆类 class Circle { public: void setR(int r) { m_R = r; } int getR() { return m_R; } void setCenter(Point center) { m_Center = center; } Point getCenter() { return m_Center; } private: int m_R; Point m_Center; }; class Point{ public: void setX(int x) { m_X = x; } void setY(int y) { m_Y = y; } int getX() { return m_X; } int getY() { return m_Y; } private: int m_X; int m_Y; }; //判断点和圆关系 void isInCircle(Circle& c, Point &p) { //计算两点距离平方 int distance =(c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX()) + (c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY()); //计算半径的平方 int rdistance = c.getR() * c.getR(); if (distance == rdistance) { cout << "点在圆上" << endl; } else if (distance > rdistance) { cout << "点在圆外" << endl; } else { cout << "点在圆内" << endl; } } int main() { Circle c; c.setR(10); Point center; center.setX(10); center.setY(0); c.setCenter(center); Point p; p.setX(10); p.setY(10); isInCircle(c, p); system("pause"); return 0; }
时间: 2024-01-18 11:03:16 浏览: 96
#include <iostream> #include<iomanip> using namespace std;九九乘法表
以上代码存在一个问题:在 Circle 类中用到了 Point 类,但是 Point 类的定义在 Circle 类之后,导致编译器无法识别 Point 类。可以通过将 Point 类的定义放在 Circle 类之前来解决这个问题,或者使用前向声明(forward declaration)来提前声明 Point 类的存在,以便编译器能够识别。以下是使用前向声明的修改代码:
```c++
#include<iostream>
#include<string>
using namespace std;
// 前向声明
class Point;
// 圆类
class Circle {
public:
void setR(int r)
{
m_R = r;
}
int getR()
{
return m_R;
}
void setCenter(Point center)
{
m_Center = center;
}
Point getCenter()
{
return m_Center;
}
private:
int m_R;
Point m_Center;
};
// 点类
class Point {
public:
void setX(int x)
{
m_X = x;
}
void setY(int y)
{
m_Y = y;
}
int getX()
{
return m_X;
}
int getY()
{
return m_Y;
}
private:
int m_X;
int m_Y;
};
// 判断点和圆关系
void isInCircle(Circle& c, Point& p) {
// 计算两点距离平方
int distance = (c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX()) + (c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY());
// 计算半径的平方
int rdistance = c.getR() * c.getR();
if (distance == rdistance)
{
cout << "点在圆上" << endl;
}
else if (distance > rdistance)
{
cout << "点在圆外" << endl;
}
else
{
cout << "点在圆内" << endl;
}
}
int main() {
Circle c;
c.setR(10);
Point center;
center.setX(10);
center.setY(0);
c.setCenter(center);
Point p;
p.setX(10);
p.setY(10);
isInCircle(c, p);
system("pause");
return 0;
}
```
在上述代码中,我们使用了 `class Point;` 前向声明 Point 类,通知编译器 Point 类的存在,以便 Circle 类能够正常使用。
阅读全文