C++:类和对象(上篇)

目录:

一:面向对象和过程的介绍

二:类的引入

三:类的定义

四:类的访问限定符以及封装

五:类的作用域

六:类的实例化

七:类对象大小的计算

八:类成员函数的this指针


思维导图:

1:面向对象和过程的介绍

C语言是面向过程的一门语言。面向过程就是:把事情拆分成几个步骤(相当于拆分成一个个的方法和数据),然后按照一定的顺序执行。

C++:是对C的改进(C++兼容C),所以C++既面向过程也面向对象。面向对象:把事物抽象成对象的概念,先抽象出对象,然后给对象赋一些属性和方法,然后让每个对象去执行自己的方法。

比如说:洗衣机洗衣服

面向对象:先抽象出对象:人,脏衣服,洗衣液,洗衣机;之后让指定的对象按照自己的方法去执行

2:类的引入

学过C语言的老铁们,应该都知道,结构体只能定义变量,不能定义函数;而在C++,里面结构体不仅可以定义变量,还支持定义函数,(在C++,更频繁使用class这个关键字来定义类)

 以实现一个为列

c语言里面的结构体是不支持函数定义在里面的

对于C++就不一样了:

3:类的定义
class className
{
 
 // 类体:由成员函数成员变量组成
};     // 一定要注意后面的分号

类体中的内容为类的成员,由2部分组成:成员函数(类的方法);成员变量(类的属性或者对象)

对于类的定义有两种方法

 3.1声明和定义全部在类体里面

3.2类的声明在.h文件,成员函数定义在.cpp文件

注意当成员函数定义在cpp文件里面的时候,需要用类的名字+域作用限定符(:)进行索命一下

3.3成员变量命名原则 

当我们初看此代码的时候,往往感到头大。到底 ‘ = ’的右边是形参还是成员变量捏???

 

这对代码的可读性的要求不就上来了吗。往往我们会对形参名字前面(后面)加一个下划线:当名字相同的时候 

 

4:类的访问限定符以及封装
4.1访问限定符

C++的访问限定符有3种: public(公有),private(私有),protect(受保护)

1. public修饰的成员在类外可以直接被访问
2. protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)
3. 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
4. 如果后面没有访问限定符,作用域就到  }  即类结束。
5. class的默认访问权限为private,struct为public(因为struct要兼容C)
注意:访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上的区别

 经典面试题:C++structclass的区别是什么?

权限不同:struct 默认权限是public,兼容C; class 默认权限是 private;在继承和模板参数列表位置,structclass也有区别; 

4.2封装

面向对象的封装有3个特点:封装,继承,多态

封装的本质就是为了更好的管理

C++ 语言中实现封装,可以 通过类将数据以及操作数据的方法进行有机结合,通过访问权限来 隐藏对象内部实现细节,控制哪些方法可以在类外部直接被使用
5:类的作用域

类定义了一个新的作用域,类的所有成员都在类的作用域中。在类体外定义成员时,需要使用 ::作用域操作符指明成员属于哪个类域。

 

6:类的实例化

一个类是对对象的一种描述,他限定了一个对象的成员属性;可以把类理解成一个模型,只是对对象的一种形象化的描述,但在创建类的成员的时候并没有对对象进行初始化(申请内存)

 

 创建了一个Date的类,但是并没有对Date这个所有的成员进行初始化

当前创建了一个time1这样的一个Date类,同时系统也为time1进行内存的分配

7:类对象大小的计算

 

结构体内存对齐规则:

1. 第一个成员在与结构体偏移量为0的地址处。
2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。
   注意:对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。
   VS中默认的对齐数为8
3. 结构体总大小为:最大对齐数(所有变量类型最大者与默认对齐参数取最小)的整数倍。
4. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,
   结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。

 

综上我们可以看出:一个类所占字节的大小实际上就是该类中所有变量的大小(注意结构体的对齐规则)

空类或者是只有成员函数的类,比较特殊,只占一个字节,用来表示类的对象

8:类成员函数的this指针

 1. 成员函数中,不能给this指针赋值。
2. 只能在“成员函数”的内部使用
3. this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给this形参。所以对象中不存储this指针。
4. this指针是“成员函数”第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传递,不需要用户传递

灵魂拷问的面试题:

1:this指针存放在哪一个区域

this指针存放在栈区的(注意不是存放在对象里面的)

2:可不可以对this指针进行赋值 

不能对this指针赋值

 分析以下程序运行的结果:

1)

有不少人可能认为程序会崩溃:p->Init( ……)这不出现了空指针的访问

注意:看到 -> 不一定就是对指针的解引用,在这里就不是对成员函数的解引用,注意Init( ……)这个函数是存放在公共代码区域的,所以这里并不会出现空指针访问的问题

2)

此时程序崩溃:原因就是对空指针出现了访问

 结语:

以上就是我今日要为大家share的内容,关于类和对象这个知识模块,比较抽象,需要多多练习,结合理解,希望大家看到此篇博客可以有所收获

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

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

相关文章

【Linux】编译器-gcc/g++的使用(预处理、编译、汇编、连接)

目录 01.预处理(宏替换) 02.编译(生成汇编) 03.汇编(生成机器可识别码) 04.连接(生成可执行文件或库文件) 05.选项 编译器在编译代码时包含以下四个步骤:1.预处理 2…

MongoDB启动报错

spring boot 引入MongoDB启动报错 java.lang.IllegalStateException: Failed to introspect Class [io.micrometer.core.instrument.binder.mongodb.DefaultMongoConnectionPoolTagsProvider] from ClassLoader [sun.misc.Launcher$AppClassLoader18b4aac2] at org.springfra…

爬虫综合案例-获取房源信息并在地图上显示

文章目录 1.项目介绍2.项目分析3.爬取房源信息4. 导入高德地图5.地图上显示房源信息6.运行程序 1.项目介绍 本次案例将从 58 同城信息网爬取相关城市的房源出租信息,然后通过高德地图把房源信息地图显示,通过地图进行浏览,点击相应的热点文字…

[运维] 可视化爬虫易采集-EasySpider(笔记)

一、下载 ​下载地址 下滑到Assets页面,选择下载 二、解压运 ​解压压缩包,打开文件夹 在此文件夹下打开Linux Terimal, 并输入以下命令运行软件: ./easy-spider.sh 注意软件运行过程中不要关闭terminal。 三、使用 1.开始 首先点击…

使用 CSS 实现毛玻璃效果

在现代 Web 设计中,毛玻璃效果越来越受欢迎。它能够让界面元素看起来更加柔和、朦胧,同时又不会完全遮挡背景内容,给人一种透明而又不失质感的视觉体验。虽然过去实现这种效果需要借助图像编辑软件,但现在只需要几行 CSS 代码,就可以在网页上呈现出令人惊艳的毛玻璃效果。 使用…

IDEA 配置阿里规范检测

IDEA中安装插件 配置代码风格检查规范 使用代码风格检测 在代码类中,右键 然后会给出一些不符合规范的修改建议: 保存代码时自动格式化代码 安装插件: 配置插件:

SPSS k-均值聚类的 anova分析表解读

from&#xff1a;SPSS K均值聚类&#xff08;k-means&#xff09;和可视化方法 - CollinsLi - 博客园 (cnblogs.com) F值&#xff1a;变量对聚类的贡献 显著性水平&#xff1a;<0.05 则因子显著

CMake笔记之PROJECT_SOURCE_DIR、CMAKE_SOURCE_DIR、CMAKE_CURRENT_BINARY_DIR对比

CMake笔记之PROJECT_SOURCE_DIR、CMAKE_SOURCE_DIR、CMAKE_CURRENT_BINARY_DIR对比 —— 杭州 2024-03-19 夜 code review! 文章目录 CMake笔记之PROJECT_SOURCE_DIR、CMAKE_SOURCE_DIR、CMAKE_CURRENT_BINARY_DIR对比1.三者区别2.具体示例说明3.CMAKE_SOURCE_DIR 和 PROJECT_S…

Sora没体验资格?开源项目:Open-Sora,复现类Sora视频生成方案

项目简介 Open-Sora项目是一项高效制作高质量视频的工作&#xff0c;明确所有权使用其模型、工具和内容的计划。通过采用开源原则&#xff0c;Open-Sora 不仅实现了先进的视频生成技术的普及&#xff0c;还提供了一个专业且用户界面的方案&#xff0c;简化了视频制作的复杂性。…

php 对接Pangle海外广告平台收益接口Reporting API

今天对接的是Pangle广告reporting api接口&#xff0c;拉取广告收益回来自己做统计。记录分享给大家 首先是文档地址,进入到Pangle后台就能看到文档地址以及参数&#xff1a; 文档地址&#xff1a;https://www.pangleglobal.com/zh/integration/reporting-api-v2 在这里插入图片…

算法---二分查找练习-2(寻找旋转排序数组中的最小值)

寻找旋转排序数组中的最小值 1. 题目解析2. 讲解算法原理3. 编写代码 1. 题目解析 题目地址&#xff1a;点这里 2. 讲解算法原理 首先&#xff0c;检查数组的最后一个元素是否大于第一个元素。如果是&#xff0c;说明数组没有进行旋转&#xff0c;直接返回第一个元素作为最小值…

稀碎从零算法笔记Day22-LeetCode:

题型&#xff1a;链表 链接&#xff1a;2. 两数相加 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;Leet 题目描述 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 …

vue项目:使用xlsx导出Excel数据

文章目录 一、安装xlsx二、报错及解决三、编写公共方法四、方法使用 一、安装xlsx 执行命令&#xff1a;npm i xlsx file-saver --save 二、报错及解决 使用时&#xff1a;import XLSX from "xlsx"; 发现如下报错信息 报错原因&#xff1a;xlsx版本不兼容。 解…

Java项目基于SpringBoot和Vue的时装购物系统的设计与实现

今天要和大家聊的是一款基于SpringBoot和Vue的时装购物系统。 &#x1f495;&#x1f495;作者&#xff1a;李同学 &#x1f495;&#x1f495;个人简介&#xff1a;混迹在java圈十年有余&#xff0c;擅长Java、微信小程序、Python、Android等&#xff0c;大家有这一块的问题可…

web前端之不一样的下拉菜单、不选中第一个元素的样式效果、伪类排除第一个元素、符号选择器、hover、not、first、child

MENU 效果图htmlcssJShtmlcss 效果图 htmlcssJS html <nav><ul><li class"navli"><h4>HTML5</h4><ul class"ulson"><li class"lison">HTML5</li></ul></li><li class"na…

Django单表数据库操作

单表操作 测试脚本 当你只想测试django某一个py文件的内容,可以不用书写前后端的交互,直接写一个测试脚本即可 单表删除 数据库操作方法: 1.all():查询所有的数据 2.filter():带有过滤条件的查询 3.get():直接拿数据对象,不存在则报错 4.first():拿queryset里面的第一个元素…

天童知识课堂|“春分”

春色正中分&#xff0c;人间恰良辰。春分&#xff0c;也称升分&#xff0c;是二十四节气之一。春分的到来&#xff0c;意味着春天已经过去一半了&#xff0c;气候也逐渐温暖&#xff0c;阳光更加明媚。而关于春分的知识&#xff0c;你知道多少呢&#xff1f;来和天童美语一起了…

鸿蒙开发实战:【系统服务管理部件】

简介 samgr组件是OpenHarmony的核心组件&#xff0c;提供OpenHarmony系统服务启动、注册、查询等功能。 系统架构 图 1 系统服务管理系统架构图 目录 /foundation/systemabilitymgr ├── samgr │ ├── bundle.json # 部件描述及编译文件 │ ├── frameworks …

vue+elementui中table实现单选行功能

el-table插件可以选择行&#xff0c;但是只能多选&#xff0c;而项目中有单选的需求。 效果如下图所示&#xff0c;点击行或者点击复选框都可以选中行&#xff08;高亮&#xff0c;复选框选中&#xff09;&#xff0c;并且每次只选中当前行&#xff0c;之前选中的行清空。点击标…

Elasticsearch:让你的 Elasticsearch 索引与 Python 和 Google Cloud Platform 功能保持同步

作者&#xff1a;来自 Elastic Garson Elasticsearch 内的索引 (index) 是你可以将数据存储在文档中的位置。 在使用索引时&#xff0c;如果你使用的是动态数据集&#xff0c;数据可能会很快变旧。 为了避免此问题&#xff0c;你可以创建一个 Python 脚本来更新索引&#xff0…