C++篇----类、封装、类访问权限、类实例化

news2024/12/24 0:23:20

文章目录

  • 一、面向过程和面向对象
  • 二、类


一、面向过程和面向对象

c语言是面向过程的编程语言 c++是面向对象的编程语言

面向过程:关注过程,对于求解问题的不走,调用函数逐步解决问题 就洗衣服来说:洗衣服需要放水,倒洗衣粉,排水,甩干,晾衣服
面向对象:关注的是对象,在洗衣服这一整体来说,参与的对象有人,洗衣粉,洗衣机,衣架(注重的是哪些参与了)关注的是对象 一个外卖系统
面向过程 点餐、上架、派单、送餐(关注过程步骤) 面向对象:
关注整个外卖系统它的对象是哪些(商家、用户、骑手)它们之间的关系,对象和对象之间的交互 将现实世界类和对象映射到虚拟计算机系统

二、类

c++兼容c语言以前的语法,struct以前的用法在c++也可以用 但是在c++中,将原本c语言中的结构体(struct)升级为了类
而在c++中,以class来代替struct作类
类:class为类的关键字,class className
class表示为类,className为类名

#include<iostream>
using namespace std;

struct Stack
{
	int* a;
	int top;
	int capacity;
};

int main()
{
	//c语法
	struct Stack st1;

	//c++将struct升级为类,此时Stack为类名,可以直接用其来定义变量(对象)
	Stack st;
	return 0;
}

类域

类形成了一个新的作用域:类域。不同类有各自不同类域,就像不同函数有不同局部域一样, 所以在不同类中定义重名成员不构成重定义
类中成员当前面的成员访问在它后面的成员是,不需要提前声明,因为类域是一个整体,在类域中访问它的成员可以随时访问
类域是一个整体不分前后访问顺序,类中前面的成员可以访问在其后面的成员

而类它的成员较结构体新增了成员函数(方法),可以在类中直接定义函数

以栈为例
struct

struct Stack
{
	//在一般情况下还需要在前面加栈的前缀,但是现在就在这个类中直接将栈的实现写出
	void Init(int defaultcapacity = 4)//类成员函数(方法)
	{
		a = (int*)malloc(sizeof(int) * defaultcapacity);
		if (nullptr == a)
		{
			perror("malloc fail\n");
			return;
		}

		top = 0;
		capacity = defaultcapacity;
	}

	void Push(int x)
	{
		//...扩容
		a[top++] = x;
	}

	void Destroy()
	{
		free(a);
		a = nullptr;
		top = capacity = 0;
	}

	int* a;
	int top;
	int capacity;
};

int main()
{
	Stack st;
	st.Init();
	return 0;
}

在这里插入图片描述

class

#include<iostream>
using namespace std;

class Stack
{
public:
	//在一般情况下还需要在前面加栈的前缀,但是现在就在这个类中直接将栈的实现写出
	void Init(int defaultcapacity = 4)
	{
		a = (int*)malloc(sizeof(int) * defaultcapacity);
		if (nullptr == a)
		{
			perror("malloc fail\n");
			return;
		}

		top = 0;
		capacity = defaultcapacity;
	}

	void Push(int x)
	{
		//...扩容
		a[top++] = x;
	}

	void Destroy()
	{
		free(a);
		a = nullptr;
		top = capacity = 0;
	}

	int* a;
	int top;
	int capacity;
};

int main()
{
	Stack st;
	st.Init(4);//不可访问,当加了权限访问符(public)就可以访问了
	return 0;
}

在这里插入图片描述

可以发现,struct关键字定义的类可以通过,而class定义的类无法通过,且class定义的类报了个无法访问的错误

访问权限
那是因为类有访问权限,三大访问权限

public:公开权限,外部用户可以访问到类中成员
protected:将类中成员保护起来不让类外部成员访问
private:只能在类域中访问,类域之外无法访问

以struct关键字作为类,它的默认访问权限是公开的(public)权限
以class关键字作为类,它的默认访问权限是私有的(private)权限

所以一般情况下,要让类之外使用到类中的哪些成员,需要用public权限访问

访问权限作用域为多大?访问权限作用域从访问符出现的位置起到下一个访问权限限定符出现的位置为止,
如果之后一直没有出现下一个访问权限限定符,那么直到类域结束
在这里插入图片描述

public到private之间的类成员是公开的,类之外能访问,而public访问的权限到private为止

封装

类将数据与实现这些数据的方法封装起来,用类将对象的属性(数据)与方法(成员函数)结合起来,让对象更加完善
将数据与方法封装起来,那么在外部用户访问它时它可以指定将哪些成员开放让别人访问到,也可以使不想让外部用户访问到的成员隐藏起来,那么类是如何使它的成员可以让别人访问与否?加访问权限

类成员函数声明与定义

那么类,它的成员函数可以将声明和定义分离吗?可以 在类中声明的函数在类域之外定义需要有作用域限定符::代表它是类的成员函数,
在这里插入图片描述

且在函数实现时
函数中的变量来自于类的话,它要去类中找,当表明这个定义的函数是类中的成员函数是,在函数中 的变量先在函数中找,然后在类域找最后全局找
在类域外边定义函数,函数前指定类域代表这个函数也就不是普通函数了,而是类中一个成员函数的定义

而且类的成员函数,定义和声明没有分离时,这个函数就是内联函数,当然只是建议编译器这个函数为内联函数
如果代码量特别大,编译器也不会接收这个建议

类成员名一般规则

类成员变量一般以_作为前缀,由于类成员函数在定义时,有可能会定义与成员变量重名,所以类,成员变量一般以_开头

#include<iostream>
using namespace std;
class Year
{
public:
	void is_year(int year)
	{
		//先用局部域在用类域
		_year = year;
		cout << _year << endl;
	}

	int _year;
};

int main()
{
	Year y;
	y.is_year(2002);

	cout << y._year << endl;
	return 0;
}

类实例化

类中成员变量只是有一个声明,并没有定义,所以没有开空间 相当于房子,只是有图纸,还没有建成真是的房子,还不能住人
只有声明并不能给声明的变量赋值,将其对象定义出来才是类的实例化
在这里插入图片描述
没有将类对象实例化出来,就访问它的成员变量,根本访问不到,相当于图纸上面画了有房子,但是现实世界中并没有将其建造出来,而仅凭一张图纸,是找不到房子的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/458923.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PCL点云库(2) — IO模块

目录 2.1 IO模块接口 2.2 PCD数据读写 &#xff08;1&#xff09; PCD数据解析 &#xff08;2&#xff09;PCD文件读写示例 2.3 PLY数据读写 &#xff08;1&#xff09;PLY数据解析 &#xff08;2&#xff09;PLY文件读写示例 2.4 OBJ数据读写 &#xff08;1&#xff…

QMS-云质说质量 - 10 我和我的客户投诉(2) - 客户逐利 驱除良币

云质QMS原创 转载请注明来源 作者&#xff1a;王洪石 上策伐谋 中策伐交 前面发过一篇关于客户投诉的文章“逢年过节要祈祷”&#xff0c;引起了很多质量人的共鸣&#xff0c;特别是汽车零部件行业曾经和正在负责客诉的质量同行们。 真实的产品质量问题&#xff0c;是否发生只…

Linux-初学者系列2——用户组管理和权限管理

用户组管理和权限管理 Linux-初学者系列2_用户组管理和权限管理一、所有者1、查看文件的所有者指令 2、修改文件所有者指令实操 二、组创建语法指令&#xff1a;实操&#xff1a; 三、所在组1、查看文件/目录所在组基本指令&#xff1a;实操&#xff1a; 2、修改文件所在组基本…

【读书笔记】高效能人士的7个习惯

高效能人士的7个习惯-史蒂芬柯维 个人成功1. 积极主动&#xff08;BE PROACTIVE&#xff09;2. 以终为始&#xff08;BEGIN WITH THE END IN MIND&#xff09;3. 要事第一&#xff08;PUT FIRST THINGS FIRST&#xff09;个人成功总结 集体成功4. 双赢思维&#xff08;THINK WI…

flex布局属性详解

Flex布局 flex-directionflex-wrapflex-flowjustify-contentalign-itemsalign-content其他orderflexalign-self 含义:Flex是Flexible Box的缩写&#xff0c;意为”弹性布局”&#xff0c;用来为盒状模型提供最大的灵活性。 flex-direction flex-direction属性决定主轴的方向&…

服务(第十二篇)LVS-DR模式

数据包流向分析&#xff1a; &#xff08;1&#xff09;客户端发送请求到 Director Server&#xff08;负载均衡器&#xff09;&#xff0c;请求的数据报文&#xff08;源 IP 是 CIP,目标 IP 是 VIP&#xff09;到达内核空间。 &#xff08;2&#xff09;Director Server 和 Re…

022 - C++ 析构函数

上期我们讨论了构造函数。认识了它是什么以及如何使用它。如果你没有看上一期&#xff0c;那么你一定要回去看一下。 今天我们要讨论一下它的“孪生兄弟”&#xff0c;析构函数&#xff0c;它们在某些方面非常相似。 构造函数是你创建一个新的实例对象时运行&#xff0c;而析…

无线测温系统在煤矿高压电气设备上的应用

摘要&#xff1a;随着社会经济的不断发展&#xff0c;电力系统向着高电压、高容量的方向前进着&#xff0c;电力系统全新的技术与设备层出不穷&#xff0c;电力的输送能力不断提升。然而&#xff0c;高压电气设备承载的高压电力负荷也让其自身的温升问题成为了威胁电网稳定的元…

张驰咨询:企业如何在不确定的环境中逆势增长?

企业不确定环境主要包括以下几个方面&#xff1a; 1、宏观经济环境的不确定性 包括国内外经济形势、政策调整、外汇汇率等因素的变化&#xff0c;会对企业的发展带来不确定性。 2、市场需求的不确定性 市场需求的变化&#xff0c;包括消费者需求、市场规模、市场结构等方面…

【自制键盘01】CH9329代码两则,让任何单片机都能做键盘

简介 CH9329是一款由WCH&#xff08;Nanjing QinHeng Electronics Co. Ltd.&#xff09;生产的USB转串口芯片&#xff0c;可以方便地将USB接口转换为串口接口&#xff0c;它在键盘设计这块可以实现作为MCU和电脑设备的“中间人”&#xff0c;把串口信号转换为按键。 引脚定义 …

如何实现电脑通过手机上网?1分钟搞定!

案例&#xff1a;电脑没网时&#xff0c;如何通过手机上网&#xff1f; 【想用电脑看电影&#xff0c;但是附近没有Wi-Fi。朋友说可以说电脑可以通过手机上网&#xff0c;但我们都不知道具体如何操作&#xff0c;有没有小伙伴可以教教我们。】 在没有Wi-Fi或有线网络接入时&a…

《Left ventricular hypertrophy detection using electrocardiographic signal》阅读笔记

论文的摘要 Left ventricular hypertrophy (LVH) indicates subclinical organ damage, associating with the incidence of cardiovascular diseases. From the medical perspective, electrocardiogram (ECG) is a low-cost, non-invasive, and easily reproducible tool th…

低代码平台-宜搭的核心概念

宜搭的核心概念 文章目录 全局变量基本的变量使用查看输出内容以及调试方式事件绑定页面生命周期条件渲染循环渲染自定义样式表单校验 全局变量 在左侧数据源中添加变量&#xff0c;添加变量的写法和js的写法一致。 基本的变量使用 给文本绑定数据源&#xff0c;点击左侧刚才定…

蒸发器前氟离子超标的解决方法

深度除氟工艺 1、活性氧化铝&#xff1a;需PH调整至酸性 2、碳基/羟基磷灰石&#xff1a;再生次数有限制 3、反渗透膜&#xff1a;造价成本高 4、特种除氟树脂&#xff1a;预处理需做好 氟化物选择吸附树脂 Tulsimer CH-87 是一款去除水溶液中氟离子的专用的凝胶型选择性…

LVS负载均衡之DR模式

DR调度服务器 192.168.255.128 Nginx节点服务器1 192.168.255.130 Nginx节点服务器2 192.168.255.131 统一虚拟ip&#xff08;vip&#xff09; 192.168.255.188 访问客户端 192.168.255.134 第一步首先关掉所有虚拟机的防火墙 systemctl stop firewalld.service setenfor…

Maya - 后缀为xgen文件导出到虚幻引擎

Xgen是集成在Maya中的工具&#xff0c;可以在指定模型表面生成和控制大量物体的集成和离散&#xff1b;经常用于复杂的毛发制作&#xff0c;可以方便的用笔刷等控制曲线&#xff08;curves&#xff09;和导引线&#xff08;guides&#xff09;等线条来控制毛发的走向&#xff1…

【MySQL】插入文件路径,反斜杠消失

系列文章 C#底层库–MySQL脚本自动构建类&#xff08;insert、update语句生成&#xff09; 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/129179216 C#底层库–MySQL数据库访问操作辅助类&#xff08;推荐阅读&#xff09; 本文链接&#xff1a;h…

克隆Linux系统(centos)

克隆前得保证你有一台Linux系统的虚拟机了。 如果没有&#xff0c;可以参考这篇文章&#xff1a; 安装VMware虚拟机、Linux系统&#xff08;CentOS7&#xff09;_何苏三月的博客-CSDN博客 按照示意图一步一步执行即可。 克隆前先关闭运行的虚拟机系统。 然后右键已安装的虚拟…

看完就懂的vue2与vue3响应式的区别

一、前言 数据响应式 所谓数据响应式就是建立响应式数据与依赖&#xff08;调用了响应式数据的操作&#xff09;之间的关系&#xff0c;当响应式数据发生变化时&#xff0c;可以通知那些使用了这些响应式数据的依赖操作进行相关更新操作&#xff0c;可以是DOM更新&#xff0c;也…

视频音频提取器推荐:快速提取视频中的音频!

视频中的音频可以用于很多用途&#xff0c;比如制作配乐、音频剪辑等。但是&#xff0c;许多人并不知道如何将视频中的音频提取出来。如果您也是这样的情况&#xff0c;那么本文为您介绍一个简单易用的视频音频提取器&#xff1a;。 它是一个免费的在线工具&#xff0c;可以帮…