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

news/2024/4/20 6:51:23/文章来源:https://blog.csdn.net/m0_67768006/article/details/130356503

文章目录

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


一、面向过程和面向对象

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.luyixian.cn/news_show_103146.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

10个必备的建筑可视化3dmax插件

当日复一日地处理项目时&#xff0c;很容易陷入舒适但效率不高的工作流程中。 插件是在不牺牲工作质量的情况下改进和加快工作流程的好方法。 尤其是在建筑可视化时&#xff0c;快节奏的行业往往需要艺术家灵活机智。 在本文中&#xff0c;我们将介绍 10 个最好的 3ds Max 插件…

C语言从入门到精通第11天(数组的基本操作)

数组的基本操作 数组的概念一维数组二维数组 数组的概念 在程序设计中&#xff0c;为了方便处理数据把具有相同类型的若干变量按有序形式集合在一起&#xff0c;这些按序排列的同类数据元素的集合称为数组。 在C语言中&#xff0c;数组属于构造数据类型&#xff0c;一个数组可…

Linux文本处理三大利器Grep、AWK、Sed

写在前面 Linux三剑客是文本处理工具&#xff0c;它们可以帮助我们快速、高效地对文本进行处理。其中包括了grep、awk、以及sed这三个强大的命令行工具。 Linux 三剑客主要作用: grep&#xff0c;它可以根据正则表达式查找相关内容并打印对应的数据。awk&#xff0c;它可以根…

C. Painting the Fence(思维 + 前缀和)

Problem - C - Codeforces You需要油漆一个由n个部分组成的长围栏。不幸的是&#xff0c;它没有被涂漆&#xff0c;所以你决定雇用q名画家来完成这项工作。第i名画家将会油漆所有满足lisxsri的部分x. 不幸的是&#xff0c;你的预算很紧&#xff0c;所以你只能雇用q-2名画家。显…

数据湖Iceberg-简介(1)

文章目录 Iceberg简介概述特性数据存储、计算引擎插件化实时流批一体数据表演化&#xff08;Table Evolution&#xff09;模式演化&#xff08;Schema Evolution&#xff09;分区演化&#xff08;Partition Evolution&#xff09;列顺序演化&#xff08;Sort Order Evolution&a…

itop-3568开发板驱动学习笔记(22)设备树(一)设备树基础

《【北京迅为】itop-3568开发板驱动开发指南.pdf》 学习笔记 文章目录 设备树简介设备树编译设备树语法设备根节点设备子节点节点名称reg 属性#address-cell 和 #size-cells 属性model 属性status 属性compatible 属性aliases 节点chosen 节点device_type 属性自定义属性 设备树…

Linux云服务器的使用,以及运行Python程序

目录 1、使用Linux云服务器的软件 2、Linux系统运行Python程序 3、Linux系统查看包、虚拟环境、安装包等 以下几个深度学习服务器都不错&#xff1a;智星云、AutoDL、恒源云 1、使用Linux云服务器的软件 MobaXterm_Personal 推荐MobaXterm_Personal mobaxterm是一款方便网站…

数据库管理新定义:一款纯Web化免费SQL开发工具,免安装

SQL Studio是一款由麦聪软件研发的多数据库管理工具&#xff0c;提供Windows、Linux 和 MacOS三种版本的软件包&#xff0c;支持中英文两种语言。SQL Studio是用Java编写的&#xff0c;默认使用 JDK 8进行编译。 下载看这里: [SQLStudio] (http://www.maicongs.com/#/home/web)…

地热井监测控制系统解决方案

概述 地热井监测控制系统主要是对地热井采水和回灌进行流量、温度、水位&#xff08;压力&#xff09;等参数的实时监测&#xff0c;对地热站现场环境进行实时视频监控。地热井现场和取水井、回灌井安装监测装置&#xff0c;通过无线传输设备将数据实时传输至自然资源局已建中…

上海车展:预售价109.8万元,仰望U8见证国产品牌崛起

如果要评选2023上海车展上比亚迪展台“最亮的星”&#xff0c;估计很多媒体和观众都会毫不迟疑地把票投给仰望U8。 没办法&#xff0c;因为在本届车展上&#xff0c;仰望U8的表现实在是太吸睛了。 作为比亚迪旗下的高端新能源品牌&#xff0c;仰望汽车在上海车展上携两款车型—…

【Leetcode -141.环形链表 -2.两数相加】

Leetcode Leetcode -141.环形链表Leetcode -2.两数相加 Leetcode -141.环形链表 题目&#xff1a;给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给…

测试Ocr工具IronOCR(续2:编写圈选图片识别文本的程序)

上篇文章介绍了加载图片并圈选图片中文字区域的程序实现方式&#xff0c;本文基于此实现识别圈选区域文字内容的程序。主要识别语言包括英文和中文。IronOCR包中自带英文语言包&#xff0c;项目还需安装中文语言包&#xff0c;建议直接安装IronOcr.Languages.Chinese语言包&…

什么样的测试才是优秀的测试

什么样的测试才是优秀的测试 优秀的测试应该包括以下要素&#xff1a; 测试代码的可读性和可维护性 代码在项目中及特定源代码中的组织方式 测试所检查的内容 测试的可靠性及可重复性 测试对测试替身的使用 可读的代码才是可维护的代码 代码较差的可读性与缺陷密度密切相…

软件测试技术那么多,我们该如何分辨?

经典软件测试技术分类&#xff1a; 测试技术是指顺利完成测试的一系列相关过程&#xff0c;有很多可能的分类方式&#xff0c;表2-1就是其中的一种。表中列出了流行的测试技术&#xff0c;也按照上面的讨论对其进行分类&#xff1a;手工测试、自动测试、静态测试、动态测试、功…

今年SMETA审核费用即将涨价

【今年SMETA审核费用即将涨价】 SMETA全称&#xff08; Sedex Members Ethical Trade Audit &#xff09;&#xff0c;即Sedex会员社会道德贸易审核&#xff0c;它是Sedex发起的一种负责任的供应链审计方法/项目。 Sedex是一个全球性的责任商业平台&#xff0c;SMETA是审核方法…

手推FlinkML2.2(三)

SQLTransformer&#xff08;SQL转换器&#xff09;是一种数据预处理方法&#xff0c;允许您使用SQL语句对数据进行转换和操作。SQL转换器通常用于数据清洗、特征工程和数据聚合等任务&#xff0c;以提高数据分析和机器学习模型的性能。它可以与各种数据处理和存储系统&#xff…

本地搭建属于自己的ChatGPT:基于PyTorch+ChatGLM-6b+Streamlit+QDrant+DuckDuckGo

本地部署chatglm及缓解时效性问题的思路&#xff1a; 模型使用chatglm-6b 4bit&#xff0c;推理使用hugging face&#xff0c;前端应用使用streamlit或者gradio。 微调对显存要求较高&#xff0c;还没试验。可以结合LoRA进行微调。 缓解时效性问题&#xff1a;通过本地数据库…

你的车有通风座椅吗?新款奔驰S400升级原厂主副驾座椅通风

大家好&#xff0c;我是奔之升小志&#xff08;bzs878&#xff09;&#xff0c;专注名车原厂升级&#xff0c;欢迎戳戳右上角“”号关注一下&#xff0c;持续为您带来精彩改装案例。 座椅通风有什么用&#xff1f;能改善身体与座椅接触面空气流通&#xff0c;达到不出汗的效果…

选择美国虚拟主机需注意的安全问题

在选择美国虚拟主机时&#xff0c;安全性应该是您首要关注的问题。虚拟主机通常是网站托管的最便宜和最方便的方式之一&#xff0c;但也存在安全问题。在本文中&#xff0c;我们将讨论一些您应该注意的安全问题&#xff0c;并提供一些解决方案来保护您的网站。 一、了解虚拟主机…

C++(继承(上))

目录 &#xff1a; 1.引出继承的概念 2.继承的关系和方式 3.继承中的作用域 ------------------------------------------------------------------------------------------------------------------------------ 1.引出继承的概念 这些学生、老师、后勤都具有相同的特征&…