C++函数和类的封装

本文通过创建一个判断点与圆的坐标位置关系的一段小代码,来练习C++中函数和类的相关知识,巩固函数封装的操作。

1 基础功能实现

导入头文件:

#include<iostream>
using namespace std;

1.1 创建点类

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;
};

1.2 创建圆类

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;//自定义一个点类坐标,用来表示圆心
};

1.3 位置判断函数

//判断点与圆的坐标位置关系
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;
 }
}

1.4 main函数

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;
}

至此,运行代码,所有功能全部实现,上面也是所有代码未封装前的样子。下面是函数和类的封装。

2 封装

2.1 point类分装

2.1.1 头文件point.h

创建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;
};

2.1.2 point.cpp

导入刚创建好的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;
}

这样,有关点类的封装就做好了。

2.2 circle类封装

2.2.1 circle.h

#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;//自定义一个点类坐标,用来表示圆心
};

2.2.2 circle.cpp

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

2.3 判断函数的封装

2.3.1 isInCircle.h

#pragma once
#include<iostream>
using namespace std;
#include"circle.h"  //需要传入圆类

void isInCircle(circle& c, point& p);

2.3.2 isInCircle.cpp

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

2.4 封装后的main函数

导入封装好的头文件

#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个子文件。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_48994268/article/details/110674115