首页 > 编程语言 >C++面向对象三大特性之一(封装)

C++面向对象三大特性之一(封装)

时间:2024-08-27 21:51:24浏览次数:7  
标签:p1 封装 Name Age C++ 面向对象 void 三大 string

下面这篇文我来给大家分享C++面向对象三大特性之一(封装)。

一、什么是封装?

分装就是一个类中的私有成员,虽然类外不可以访问,但是我们提供一些公共的接口来间接让其他人访问到,例如一个人的名字我们起好之后就一般不会允许其他人改你的姓名,但是我们可以通过一些方式得到你的姓名,这就是封装。

二、为什么要封装?

1、封装可以保护数据,防止数据被随意篡改。
2、利于后期维护,当我们要修改代码时我们不需要大量的修改代码的片段只需要修改被封装的这段代码,例如:判断文件是否为空的代码,我们每次打开文件时都要用到,如果我们打开了三个文件,就要写三次代码而且后期需要修改时要修改三处,但我们如果封装了该代码就只需要在需要的地方的调用判断文件为空的接口,如果出错了后期要维护我们只需要改接口里的内容而不用修改其他几处,大大提高了维护效率。

三、封装例子

下面我们创建一个Person类, 然后封装一下Person类的属性;

class Person
{
private:
	string m_Name;
	int m_Age;

public:
	//封装姓名
	//获取姓名
	string getName()
	{
		return this->m_Name;
	}
	//设置姓名
	void setName(string name)
	{
		this->m_Name = name;
	}
	//封装年龄
	//获取年龄
		int getAge()
	{
		return this->m_Age;
	}
	//设置年龄
	void setAge(int age)
	{
		this->m_Age = age;
	}
};

分装完成之后我们创建test01函数来测试一下封装是否成功,

void test01()
{
	Person p1;
	//p1.m_Name="小明";//会报错,不可直接访问了
	//p1.m_Age=22;//会报错,不可直接访问了
	p1.setName("小明");
	p1.setAge(22);

	cout << "姓名:" << p1.getName() << endl;
	cout << "年龄:" << p1.getAge() << endl;
}

可以发现我们封装完毕后直接访问姓名和年龄是不可以的,但是我们可以通过公共接口来访问我们的属性。

四、下面是全部代码

#include<iostream>
using namespace std;

class Person
{
private:
	string m_Name;
	int m_Age;

public:
	//封装姓名
	//获取姓名
	string getName()
	{
		return this->m_Name;
	}
	//设置姓名
	void setName(string name)
	{
		this->m_Name = name;
	}
	//封装年龄
	//获取年龄
		int getAge()
	{
		return this->m_Age;
	}
	//设置年龄
	void setAge(int age)
	{
		this->m_Age = age;
	}
};

void test01()
{
	Person p1;
	//p1.m_Name="小明";//会报错,不可直接访问了
	//p1.m_Age=22;//会报错,不可直接访问了
	p1.setName("小明");
	p1.setAge(22);

	cout << "姓名:" << p1.getName() << endl;
	cout << "年龄:" << p1.getAge() << endl;
}

int main()
{

	test01();
	system("pause");
	return 0;
}

运行结果如下
在这里插入图片描述

标签:p1,封装,Name,Age,C++,面向对象,void,三大,string
From: https://blog.csdn.net/m0_57094953/article/details/141612572

相关文章

  • C++/C区别
    C++/C差别typedef和using的差别,typedef可以用来定义一个类型,也可以用于定义别名。using还是做不到定义类型,但是可以用于别名。voidAadd(){/*code*/}voidBadd(){/*code*/}typedefvoid(*PFunc)();//定义一个函数指针类型PFuncfunc=Aadd;PFuncfu......
  • 链表简介c++
    定义:链表是一种数据结构,其中元素(也称为节点)不是连续存储的。每个节点包含数据部分和一个指向下一个节点的指针。类型:在C++中,有两种主要类型的链表:单链表(每个节点只有一个指针指向下一个节点)和双向链表(每个节点有两个指针,一个指向前一个节点,另一个指向后一个节点)。结构......
  • C++实现的最短路径问题
    最短路径问题最短路径问题是图论中的一个经典问题,旨在寻找从一个起点到一个终点的最短路径。最常见的算法包括Dijkstra算法、Bellman-Ford算法和Floyd-Warshall算法。这些算法被广泛用于导航系统、网络路由等领域。问题描述输入:一个加权图,表示图中各节点之间的连接和权......
  • 7.java面向对象
    面向过程&面向对象面向过程思想步骤清晰简单,第一步做什么,第二步做什么…...面对过程适合处理一些较为简单的问题。面向对象思想物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最后,才对某个分类下的细节进行面向过程的思索。......
  • C++系列学习笔记
    #include<iostream>#include<iomanip>usingnamespacestd;//namespace:命名空间的关键字//std:系统的关键字intmain(){cout<<"输入"<<endl<<"int,char,double"<<endl;intnum=0;ch......
  • JAVA基础之二-面向对象简述
    java基础之二-面向对象简述一、概述如果有机会多接触几种语言,对于程序员多少是有好处的,至少有助于理解代码的运行真谛。高级语言有很多是面向对象的,因为面向对象的优点是显而易见的。这里比较知名的有rust,java,c++,c#但也有很多语言是面向过程的,鼎鼎有名有C,还有现在大家不......
  • C++趣味实验之:二次函数面积与微积分
    在数学中,我们可以使用微积分来计算由二次函数抛物线构成的图形根据这个原理,我们可以用程序模拟计算这些图形的面积longdoublex,y,a,b,c;首先,定义出函数的各个参数输入a,b,c的数值后,计算其数值并绘制其图像for(inti=1;i<=1000;i++){ x+=0.1; y=a*x*x; y=y+b*x; ......
  • C++:new
    还记得之前帖子中提到的malloc吗,new和malloc都可以申请和释放空间。一般使用new有三种格式:1.指针变量名=new+类型;2.指针变量名=new+类型(赋予一个初始值);3.指针变量名=new+类型[内存单元个数];释放空间需要用到delete。例子:#include<iostream>usingnamespacestd;in......
  • C++基础
    目录思维导图:学习内容:1.面向对象 1.1.概念1.2.所谓面向对象编程1.3.面向过程与面向对象2.命名空间2.1为何引入命名空间2.2程序中的标识符2.3 系统提供的命名空间std2.4 自定义命名空间 2.4.1 定义格式2.4.2 多个命名2.4.3 命名空间嵌套定义2......
  • 有趣的C++模板代码
    1#include<iostream>2template<typename...Ts>3structCNAny{4staticboolDo(inti){5return(Ts::Do(i)||...);6}7};89template<typename...Ts>10structCNAll{11staticboolDo(inti){......