赞
踩
本文通过创建一个判断点与圆的坐标位置关系的一段小代码,来练习C++中函数和类的相关知识,巩固函数封装的操作。
导入头文件:
#include<iostream>
using namespace std;
class point { public: //设置点的x坐标 void set_x(int x) { m_x=x; } //获取坐标 int get_x() { return m_x; } //设置点y的坐标 void set_y(int y) { m_y = y; } //获取坐标 int get_y() { return m_y; } private: int m_x; int m_y; };
class circle { public: //设置半径 void set_r(int r) { m_r = r; } //获取半径 int get_r() { return m_r; } //设置圆心(这里传的是坐标) void setCenter(point center) { m_center = center; } //获取圆心 point getCenter() { return m_center; } private: int m_r;//半径 point m_center;//自定义一个点类坐标,用来表示圆心 };
//判断点与圆的坐标位置关系 void isInCircle(circle &c,point &p) { //计算两点之间距离的平方 int distance = (c.getCenter().get_x() - p.get_x()) * (c.getCenter().get_x() - p.get_x()) + (c.getCenter().get_y() - p.get_y()) * (c.getCenter().get_y() - p.get_y()); //计算半径的平方 int rDistance = c.get_r() * c.get_r(); //判断关系 if (distance == rDistance) { cout << "点在圆上" << endl; } else if (distance > rDistance) { cout << "点在圆外" << endl; } else { cout << "点在圆内" << endl; } }
int main() { //创建一个点 point p1; p1.set_x(5); p1.set_y(5); //创建一个圆 circle c1; c1.set_r(5); point center; center.set_x(0); center.set_y(0); c1.setCenter(center); isInCircle(c1, p1); system("pause"); return 0; }
至此,运行代码,所有功能全部实现,上面也是所有代码未封装前的样子。下面是函数和类的封装。
创建point.h的头文件(头文件中只需要声明即可):
#pragma once //防止头文件的重复包含 #include <iostream> //标准输出流 using namespace std; //标准名空间 //点类 将上面点类的代码复制下来,将具体的操作删除,只保留声明,注意加分号; class point { public: //设置x点的坐标 void set_x(int x); //获取坐标 int get_x(); //设置y点的坐标 void set_y(int y); //获取坐标 int get_y(); private: int m_x; int m_y; };
导入刚创建好的point.h头文件,将点类的代码复制并只留下函数的具体实现的部分,函数前面加上point的作用域:
#include "point.h" //导入创建的头文件 void point::set_x(int x) //需要加上point作用域 { m_x = x; } //获取坐标 int point::get_x() { return m_x; } //设置y点的坐标 void point::set_y(int y) { m_y = y; } //获取坐标 int point:: get_y() { return m_y; }
这样,有关点类的封装就做好了。
#pragma once #include <iostream> using namespace std; #include"point.h" //需要点类支撑 class circle { public: //设置半径 void set_r(int r); //获取半径 int get_r(); void setCenter(point center); point getCenter(); private: int m_r;//半径 point m_center;//自定义一个点类坐标,用来表示圆心 };
#include"circle.h" //设置半径 void circle :: set_r(int r) { m_r = r; } //获取半径 int circle::get_r() { return m_r; } //设置圆心(这里传的是坐标) void circle::setCenter(point center) { m_center = center; } //获取圆心 point circle::getCenter() { return m_center; }
#pragma once
#include<iostream>
using namespace std;
#include"circle.h" //需要传入圆类
void isInCircle(circle& c, point& p);
#include"isInCircle.h" void isInCircle(circle& c, point& p) { //计算两点之间距离的平方 int distance = (c.getCenter().get_x() - p.get_x()) * (c.getCenter().get_x() - p.get_x()) + (c.getCenter().get_y() - p.get_y()) * (c.getCenter().get_y() - p.get_y()); //计算半径的平方 int rDistance = c.get_r() * c.get_r(); //判断关系 if (distance == rDistance) { cout << "点在圆上" << endl; } else if (distance > rDistance) { cout << "点在圆外" << endl; } else { cout << "点在圆内" << endl; } }
导入封装好的头文件
#include<iostream> using namespace std; #include"circle.h" #include "point.h" #include"isInCircle.h" int main() { //创建一个点 point p1; p1.set_x(5); p1.set_y(5); //创建一个圆 circle c1; c1.set_r(5); point center; center.set_x(0); center.set_y(0); c1.setCenter(center); isInCircle(c1, p1); system("pause"); return 0; }
至此,所有实现函数的各个子模块都封装完成,包含point.h; point.cpp; circle.h; circle.cpp; isInCircle.h; isInCircle.cpp;main程序,7个子文件。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。