本文共 5354 字,大约阅读时间需要 17 分钟。
设计一个圆形类(AdvCircle)和一个点类(Point),计算点和圆的关系。
假如圆心坐标为x0,y0,半径为r,点的坐标为x1,y1 写法1:将圆心坐标设置为圆类的成员属性#includeusing namespace std;#include class AdvCircle { public: AdvCircle(int x0,int y0,int r):m_x0(x0),m_y0(y0),m_r(r){ } int getX0() const{ return m_x0; } int getY0() const { return m_y0; } int getR() const { return m_r; }private: int m_x0; int m_y0; int m_r;};class Point { public: Point(int x1,int y1):m_x1(x1),m_y1(y1){ } int getX1() const { return m_x1; } int getY1() const { return m_y1; }private: int m_x1; int m_y1;};void judge(const AdvCircle& c, const Point& p) { double ret = pow((p.getX1() - c.getX0()), 2) + pow((p.getY1() - c.getY0()), 2); if (ret == c.getR()*c.getR()) { cout << "点在圆上" << endl; } else if (ret > c.getR()*c.getR()) { cout << "点在圆外" << endl; } else { cout << "点在圆内" << endl; }}void test01() { AdvCircle c1(0, 0, 10); Point p1(3, 4); judge(c1, p1);}int main1() { test01(); system("pause"); return 0;}
写法2:将圆心坐标作为点类,作为圆类的一个成员属性(全局函数方法)
#includeusing namespace std;#include #if(1)class Point { public: //Point(int x, int y) :m_x(x), m_y(y) {} //Error C2280 'AdvCircle::AdvCircle(void)': attempting to reference a deleted function //错误c2280 'AdvCircle::AdvCircle(void)':试图引用一个已删除的函数 //使用构造函数初始化Point类对象时出现上述错误#if(1) void setXY(int x, int y) { m_x = x; m_y = y; }#endif int getX() { return m_x; } int getY() { return m_y; }private: int m_x; int m_y;};#endifclass AdvCircle { public: void setR(int r) { m_r = r; } int getR() { return m_r; } //设置圆心 void setCenter(Point &p) { m_center = p; } //获取圆心 Point getCenter() { return m_center; } private: Point m_center; int m_r;};//利用全局函数判断点和圆的关系void isInCircle(AdvCircle &c, Point &p) { double ret = pow((p.getX() - c.getCenter().getX()), 2) + pow((p.getY() - c.getCenter().getY()), 2); if (ret == c.getR()*c.getR()) { cout << "点在圆上" << endl; } else if (ret > c.getR()*c.getR()) { cout << "点在圆外" << endl; } else { cout << "点在圆内" << endl; }}void test01() { Point p1; p1.setXY(3, 4); Point center; AdvCircle c1; center.setXY(0, 0); c1.setR(1); c1.setCenter(center); isInCircle(c1, p1);}int main() { test01(); system("pause"); return 0;}
成员函数方法:
#includeusing namespace std;#include class Point { public: //Point(int x, int y) :m_x(x), m_y(y) {} //Error C2280 'AdvCircle::AdvCircle(void)': attempting to reference a deleted function //错误c2280 'AdvCircle::AdvCircle(void)':试图引用一个已删除的函数 //使用构造函数初始化Point类对象时出现上述错误 void setXY(int x, int y) { m_x = x; m_y = y; } int getX() { return m_x; } int getY() { return m_y; }private: int m_x; int m_y;};class AdvCircle { public: void setR(int r) { m_r = r; } //设置圆心 void setCenter(Point &p) { m_center = p; } //获取圆心 Point getCenter() { return m_center; } //利用成员函数判断点和圆的关系 void isInCircle(Point p) { double ret = pow((p.getX() - m_center.getX()), 2) + pow((p.getY() - m_center.getY()), 2); if (ret == m_r*m_r) { cout << "点在圆上" << endl; } else if (ret > m_r*m_r) { cout << "点在圆外" << endl; } else { cout << "点在圆内" << endl; } } private: Point m_center; int m_r;};void test02() { AdvCircle a; Point p; p.setXY(3, 4); a.setR(51); Point center; center.setXY(0, 0); a.setCenter(center); int r = a.getR(); a.isInCircle(p);}int main() { test02(); system("pause"); return 0;}
分文件编写
main.cpp#includeusing namespace std;#include #include"circle.h"#include"point.h"//利用全局函数判断点和圆的关系void isInCircle(AdvCircle &c, Point &p) { double ret = pow((p.getX() - c.getCenter().getX()), 2) + pow((p.getY() - c.getCenter().getY()), 2); if (ret == c.getR()*c.getR()) { cout << "点在圆上" << endl; } else if (ret > c.getR()*c.getR()) { cout << "点在圆外" << endl; } else { cout << "点在圆内" << endl; }}void test01() { Point p1; p1.setXY(3, 4); Point center; AdvCircle c1; center.setXY(0, 0); c1.setR(1); c1.setCenter(center); isInCircle(c1, p1);}void test02() { AdvCircle a; Point p; p.setXY(3, 4); a.setR(2); Point center; center.setXY(0, 0); a.setCenter(center); int r = a.getR(); a.isInCircle(p);}int main() { test02(); system("pause"); return 0;}
point.h#pragma once#includeusing namespace std;class Point { public: void setXY(int x, int y); int getX(); int getY();private: int m_x; int m_y;};
point.cpp#include"point.h"void Point::setXY(int x, int y) { m_x = x; m_y = y;}int Point::getX() { return m_x;}int Point::getY() { return m_y;}
circle.h#pragma once#includeusing namespace std;#include"point.h"class AdvCircle { public: void setR(int r); int getR(); //设置圆心 void setCenter(Point &p); //获取圆心 Point getCenter(); //利用成员函数判断点和圆的关系 void isInCircle(Point p);private: Point m_center; int m_r;};
circle.cpp#include"circle.h"void AdvCircle::setR(int r) { m_r = r;}int AdvCircle::getR() { return m_r;}//设置圆心void AdvCircle::setCenter(Point &p) { m_center = p;}//获取圆心Point AdvCircle::getCenter() { return m_center;}//利用成员函数判断点和圆的关系void AdvCircle::isInCircle(Point p) { double ret = pow((p.getX() - m_center.getX()), 2) + pow((p.getY() - m_center.getY()), 2); if (ret == m_r*m_r) { cout << "点在圆上" << endl; } else if (ret > m_r*m_r) { cout << "点在圆外" << endl; } else { cout << "点在圆内" << endl; }}
转载地址:http://edabi.baihongyu.com/