当前位置:   article > 正文

C++函数和类的封装_c++封装函数

c++封装函数

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

1 基础功能实现

导入头文件:

#include<iostream>
using namespace std;
  • 1

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
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

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

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;
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

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

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;//自定义一个点类坐标,用来表示圆心
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

2.3 判断函数的封装

2.3.1 isInCircle.h

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

void isInCircle(circle& c, point& p);
  • 1
  • 2
  • 3
  • 4
  • 5

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;
 }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

至此,所有实现函数的各个子模块都封装完成,包含point.h; point.cpp; circle.h; circle.cpp; isInCircle.h; isInCircle.cpp;main程序,7个子文件。

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/392679
推荐阅读
相关标签
  

闽ICP备14008679号