IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++类与封装实例说明 -> 正文阅读

[C++知识库]C++类与封装实例说明

众所周知,C++具有三大特性,分别为封装、继承、多态,今天有位同学问到我应该如何去理解,我翻了翻笔记本,找到以前上课时学到的案例来解释。

首先,成员函数存在希望公开或不希望公开的属性,这也构成了定义成员函数访问级别的三项:
1、public:公开权限,类内与内外均可访问,体现为可读可写
2、private:私有权限,类内可访问但类外不可访问,体现为不可读可写
3、protected:保护权限,类内可访问但类外不可访问,不可读不可写,涉及到更多的继承部分,这里暂且按下不表

用一个案例来说明一下类:

//设计一个角色类
class Role
{
public:

	//写名称
	void setName(string name)
	{
		r_name = name;
	}
	//读名称
	string getName()
	{
		return r_name;
	}
	//写编号
	void setID(int id)
	{
		r_ID = id;
	}
	//读编号
	int getID()
	{
		return r_ID;
	}
	//写技能
	void setSkill(string skill)
	{
		r_skill = skill;
	}
	//读技能
	string getSkill()
	{
		return r_skill;
	}
private://角色属性
	string r_name;
	int r_ID;
	string r_skill;
};

我们创建了一个角色的类,其中包含多种角色属性,接着通过在主函数中写入角色信息

void display(Role &r) {
	cout <<"角色名:" << r.getName()<<"  角色编号:"<<r.getID()<<"  角色能力:"<<r.getSkill()<<endl;
}
int main()
{
	Role r;
	r.setName("Clark");
	r.setID(001);
	r.setSkill("rush");
	display(r);
}

进行输出,我们将得到结果

角色名:Clark  角色编号:1  角色能力:rush

可以见得,封装可以将部分元素隐藏,并且隐藏其中的实现过程,如上代码的函数调用也是封装形式的一种体现。

而在更加复杂的工程中,封装调用就能显著的凸显其特性的优势,如,我们需要得到二维坐标轴中的点是否在圆上时便可使用。
我们知道两点之间的距离公式:
在这里插入图片描述
于是我们很容易便有了思路,只要圆心与点的距离等于半径,便可以得出是否在圆上,而我们也需要有圆和点两个类:


我们一个一个文件来看

#pragma once
#include<iostream>
using namespace std;

class Point//只做成员函数的声明
{
public:
	void setX(int x);

	int getX();

	void setY(int y);

	int getY();

private:
	int p_X;
	int p_Y;
};

这是生命成员函数:点的头文件

#include "point.h"

//public:
//	void setX(int x)
//	{
//		p_X = x;
//	}
//	int getX()
//	{
//		return p_X;
//	}
//	void setY(int y)
//	{
//		p_Y = y;
//	}
//	int getY()
//	{
//		return p_Y;
//	}//如果按上面角色属性的写法,将会产生报错,这是由于set,get属于成员函数,不能用全局函数的写法
void Point::setX(int x)//添加作用域:这是一个成员函数了
{
	p_X = x;
}
int  Point::getX()
{
	return p_X;
}
void  Point::setY(int y)
{
	p_Y = y;
}
int  Point::getY()
{
	return p_Y;
}

此为点的源文件。
同理写出圆的:

#pragma once
#include<iostream>
using namespace std;
#include "point.h"

class Circle
{
public:
	//设置半径
	void setR(int r);

	//获取半径
	int getR();

	//设置圆心
	void setCenter(Point center);

	//获取圆心
	Point getCenter();


private:

	int c_R; //半径

	Point c_Center;//圆心


};

头文件

#include"circle.h"

	//设置半径
	void Circle::setR(int r)
	{
		c_R = r;
	}
	//获取半径
	int Circle::getR()
	{
		return c_R;
	}
	//设置圆心
	void Circle::setCenter(Point center)
	{
		c_Center = center;
	}
	//获取圆心
	Point Circle::getCenter()
	{
		return c_Center;
	}

源文件
最后,我们只要在test源文件里写入主函数和计算的函数就可以了,我们已经知道了两点之间距离的计算公式,但是根号并不好算,于是我们采用等号两边都取平方的算法,这样快捷方便,并且有效避免了圆心出现负值的情况。

#include<iostream>
using namespace std;
#include"circle.h"
#include"point.h"

void isInCircle(Circle& c, Point& p)
{
	//计算两点之间距离的平方
	int distance =
		(c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX()) +
		(c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY());
	//计算半径的平方
	int rDistance =
		c.getR() * c.getR();
	//判断关系
	if (distance == rDistance)
	{
		cout << "点在圆上" << endl;
	}
	else if (distance > rDistance)
	{
		cout << "点在圆外" << endl;
	}
	else
	{
		cout << "点在圆内" << endl;
	}
}


int main()
{
	//创建圆
	Circle c;
	c.setR(10);
	Point center;
	center.setX(0);
	center.setY(0);
	c.setCenter(center);
	//创建点
	Point p;
	p.setX(10);
	p.setY(0);
	//判断关系
	isInCircle(c,p);
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-12 17:14:26  更:2022-03-12 17:17:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:31:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码