C++类和对象深入探索之分文件编写点和圆的关系详解
创建圆心类
point.h
#pragma once #include<iostream> using namespace std; //创建圆心类 class Point { public: void setM_x(int x); int getM_x(); void setM_y(int y); int getM_y(); private: int m_x; int m_y; };
把圆心的横纵坐标设为私有,公共属性写了两对成员方法,用来给圆心属性赋值和读取,这里只写了方法的声明,具体实现将在point.cpp文件实现。
point.cpp
#include"point.h" void Point::setM_x(int x) { m_x = x; } int Point::getM_x() { return m_x; } void Point::setM_y(int y) { m_y = y; } int Point::getM_y() { return m_y; }
这个文件就是point头文件中定义成员方法的具体实现了,引入point.h头文件,在四个方法的返回值类型和方法名面前加::,表示属于圆心类的方法,然后完成赋值和取值的实现。
创建圆类
Circle.h
#pragma once #include<iostream> #include "point.h" using namespace std; //创建 Circle 类 class Circle { public: void setM_r(int r); int getM_r(); void setCenter(Point ¢er); Point getCenter(); private: int m_r; Point m_center; };
这里和point.h类似,设置了圆心和圆半径的属性并设置为私有;在公共权限下定义为半径赋值和取值的方法;对于圆心,我引入point.h的头文件,在圆类中创建了圆心m_center,设置圆心方法中采用引用传参,将圆心类完成赋值的圆心传入到圆类中;获取圆心的途径是通过 getCenter 方法调用point 类中的 get 方法。
Circle.cpp
#include"Circle.h" void Circle::setM_r(int r) { m_r = r; } int Circle::getM_r() { return m_r; } void Circle::setCenter(Point ¢er) { m_center = center; } Point Circle::getCenter() { return m_center; }
引入Circle.h头文件,将.h的方法完成具体实现。
判断点圆关系函数
void relative(Circle& c, Point& p) { //圆心到点距离的平方为distance int distance = (c.getCenter().getM_x() - p.getM_x()) * (c.getCenter().getM_x() - p.getM_x()) + (c.getCenter().getM_y() - p.getM_y()) * (c.getCenter().getM_y() - p.getM_y()); //半径的平方 rDistance int rDistance = c.getM_r() * c.getM_r(); if (distance > rDistance) cout << "点在圆外" << endl; else if (distance == rDistance) cout << "点在圆上" << endl; else cout << "点在圆内" << endl; }
数学上点和圆的关系是圆心到点的距离和半径的比较,这里我把等号两边平方,比较两个数据的大小即可;若距离大于半径,点在圆外;距离等于半径,点在圆上;距离小于半径,点在圆内;relative 函数传入Circle 类和 Point 类的对象,分别计算圆心到点距离的平方 distance和半径的平方 rDistance,利用多重If语句输出不同结果即可。
最终实现
#include"Circle.h" void relative(Circle& c, Point& p) { //圆心到点距离的平方为distance int distance = (c.getCenter().getM_x() - p.getM_x()) * (c.getCenter().getM_x() - p.getM_x()) + (c.getCenter().getM_y() - p.getM_y()) * (c.getCenter().getM_y() - p.getM_y()); //半径的平方 rDistance int rDistance = c.getM_r() * c.getM_r(); if (distance > rDistance) cout << "点在圆外" << endl; else if (distance == rDistance) cout << "点在圆上" << endl; else cout << "点在圆内" << endl; } int main() { int x = 0, y = 0, a = 0, b = 0, r = 0; Circle C; Point center, P; cout << "圆心横坐标 x 为:"; cin >> x; cout << endl; cout << "圆心纵坐标 y 为:"; cin >> y; cout << endl; center.setM_x(x); center.setM_y (y); C.setCenter(center); cout << "此圆 半径 r 为:"; cin >> r; cout << endl; C.setM_r(r); cout << "点横坐标 x 为:"; cin >> a; cout << endl; cout << "点纵坐标 y 为:"; cin >> b; cout << endl; P.setM_x(a); P.setM_y(b); relative(C, P); }
主函数创建Circle类对象 C,和Point 类对象 P,center;通过set方法设置center点的坐标并传入C的setCenter方法中,这样圆心数据赋值完成,然后利用相同方法对圆半径以及点赋值,最后调用relative函数比较即可,附上三种运行结果,如下:
总结
这个案例应该是很好理解的,总共是五个文件,两个.h三个.cpp。这样看着非常的舒服和整洁,建议大家在做稍微复杂的项目或者案例时可以多利用分文件编写,那么C++实现点和圆的关系到此结束,期待你的鼓励和支持
上一篇:C语言堆与二叉树的顺序结构与实现
栏 目:C代码
下一篇:C语言数组全面总结梳理
本文标题:C++类和对象深入探索之分文件编写点和圆的关系详解
本文地址:http://www.codeinn.net/misctech/207640.html