博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面向对象设计案例——点和圆关系
阅读量:4026 次
发布时间:2019-05-24

本文共 5354 字,大约阅读时间需要 17 分钟。

设计一个圆形类(AdvCircle)和一个点类(Point),计算点和圆的关系。

假如圆心坐标为x0,y0,半径为r,点的坐标为x1,y1
写法1:将圆心坐标设置为圆类的成员属性

#include
using 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:将圆心坐标作为点类,作为圆类的一个成员属性(全局函数方法)

#include
using 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;}

成员函数方法:

#include
using 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#include
using 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#include
using 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#include
using 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/

你可能感兴趣的文章
简单Linux C线程池
查看>>
内存池
查看>>
输入设备节点自动生成
查看>>
opencv test code-1
查看>>
eclipse 导入先前存在的项目
查看>>
GNU hello代码分析
查看>>
Qt继电器控制板代码
查看>>
busybox passwd修改密码
查看>>
wpa_supplicant控制脚本
查看>>
rfkill: WLAN hard blocked
查看>>
gstreamer相关工具集合
查看>>
arm 自动升级脚本
查看>>
RS232 四入四出模块控制代码
查看>>
gstreamer插件之 videotestsrc
查看>>
autoupdate script
查看>>
linux 驱动开发 头文件
查看>>
/etc/resolv.conf
查看>>
container_of()传入结构体中的成员,返回该结构体的首地址
查看>>
linux sfdisk partition
查看>>
ipconfig,ifconfig,iwconfig
查看>>