【c++】图解类和对象(上)

news2024/10/6 8:26:17

类和对象(上)


文章目录

  • 类和对象(上)
  • 一、面向过程和面向对象初步认识
  • 二、类的引入
  • 三、类的定义
  • 四、类的访问限定符及封装
    • 1.访问限定符
    • 2.封装
  • 五、类的作用域
  • 六、类的实例化
  • 七、类对象模型
  • 八、this指针
  • 总结


一、面向过程和面向对象初步认识

C语言和C++两种语言最大的不同就在于C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。而C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完
成。(注意:C++并不是纯面向对象,Java是纯面向对象,由于C++需要兼容C语言,所以C++可以面向对象和过程混编


在这里插入图片描述


二、类的引入

C++兼容C语言,所以兼容struct结构体语法,C++同时把 struct 升级成了 类


三、类的定义

1.小函数,想成为inline,直接在类里面定义即可;2.如果是大函数,应该声明和定义分离

在这里插入图片描述


四、类的访问限定符及封装

1.访问限定符

访问限定符说明:

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

2.封装

封装:将数据和操作数据的方法进行有机结合,隐藏(成员变量 private/ protected)对象的属性和实现细节,仅对外公开接口(开放用成员函数 public)来和对象进行交互。封装的本质上是一种管理~
在这里插入图片描述


五、类的作用域

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


类中开空间就是定义,不开空间就是声明;所谓类就相当于一个图纸只在实例化对象的时候才是开辟空间
在这里插入图片描述


六、类的实例化

用类类型创建对象的过程,称为类的实例化。类只是一个设计图纸,类实例化出对象是图纸建的房子!
在这里插入图片描述


七、类对象模型

类对象的存储方式:只保存成员变量,成员函数存放在公共的代码段
在这里插入图片描述


结论 :一个类的大小,实际就是该类中”成员变量”之和,当然要注意内存对齐
结构体内存对齐可以参考 : 结构体内存对齐详解
另外:没有成员变量的类对象,给1byte,占位不存储实际数据,标识对象存在


八、this指针

在这里插入图片描述


有了 this指针,代码就会被优化成以下 :
在这里插入图片描述


this 指针存在哪里?
存在栈,因为他是一个形参!
vs下面传递this指针,是通过exc寄存器传递的,这样this访问变量提高效率


面试题:下面程序编译运行结果是?A .编译报错; B.运行崩溃; C.正常运行!
在这里插入图片描述


在这里插入图片描述


总结

以上就是今天要讲的内容,本文介绍类和对象上的内容(附图解)。
如果我的博客对你有所帮助记得三连支持一下,感谢大家的支持!
在这里插入图片描述

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

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

相关文章

Mysql中select语句的执行流程?

Mysql中select语句的执行流程? 答: SELECT 语句的执行过程为:连接、查询缓存、a词法分析,语法分析,语义分析,构造执行树,生成执行计划、执行器执行计划,下面开始梳理一次完整的查询…

【MySQL】视图,事务、隔离级别

视图--虚表,不在数据库中存放数据,数据源于基本表。 为什么要使用视图 简化复杂的sql操作,在编写查询后,可以方便的重用它而不必知道它的查询细节。重复使用该sql语句。使用表的组成部分而不是整个表。保护数据,可以给…

vscode编译的时候:未定义标识符 thread

vscode编译的时候:未定义标识符 thread thread’ was not declared in this scope" 未定义标识符 thread 原因 MinGW GCC当前仍缺少标准C 11线程类的实现。 对于跨平台线程实现,GCC标准库依赖于gthreads / pthreads库。如果该库不可用&#xf…

手搓GPT系列之 - 通过理解LSTM的反向传播过程,理解LSTM解决梯度消失的原理 - 逐条解释LSTM创始论文全部推导公式,配超多图帮助理解(上篇)

1. 前言 说起RNN和LSTM,就绕不过Sepp Hochreiter 1997年的开山大作 Long Short-term Memory。奈何这篇文章写的实在是太劝退,整篇论文就2张图,网上很多介绍LSTM的文章都对这个模型反向传播的部分避重就轻,更少见(反正…

2023/5/14学习总结

这道题我们可以看到数据范围很小 &#xff0c;所以可以使用暴力枚举&#xff0c;将所有可以组成长方形的长宽全遍历一遍&#xff0c;同时要满足这个长方形里没有障碍物的条件&#xff0c;取得周长最大值 #include<bits/stdc.h> using namespace std; typedef long long …

JavaSE基础(六)—— 面向对象、封装、对象内存图、成员变量和局部变量区别

目录 一、面向对象对象介绍 1. 面向对象的重点学习什么 二、设计对象并使用 1. 设计类&#xff0c;创建对象并使用 1.1 如何得到对象 1.2 如何使用对象 2. 定义类的几个补充注意事项 2.1 对象的成员变量的默认值规则 三、对象内存图 1. 多个对象内存图 2. 两个变量指…

Springboot +Flowable,流程表单应用之静态表单

一.简介 整体上来说&#xff0c;我们可以将Flowable 的表单分为三种不同的类型&#xff1a; 动态表单 这种表单定义方式我们可以配置表单中每一个字段的可读性、可写性、是否必填等信息&#xff0c;不过不能定义完整的表单页面。外置表单 外置表单我们只需要定义一下表单的 k…

生命周期、数据共享、ref引用、购物车案例

生命周期&数据共享 1.组件的生命周期2.组件之间的数据共享3.ref 引用4.购物车案例 1.组件的生命周期 生命周期 & 生命周期函数 生命周期&#xff08;Life Cycle&#xff09;是指一个组件从创建 -> 运行 -> 销毁的整个阶段&#xff0c;强调的是一个时间段。 生命…

chatGPT提问,BGP内容

ChatGPT提问&#xff1a;提问框架 背景角色任务要求 动态路由&#xff1a;内部网关协议&#xff1a;如RIP ISIS OSPF 在同一个公司内部运行的路由协议 外部网关协议&#xff1a;如 BGP 在不同公司之间运行的路由协议 AS&#xff1a;自治系统 每个自治系统都有唯一的…

动态组件、插槽、自定义指令、Eslint和prettierrc配置、axios全局挂载

动态组件、插槽、自定义指令、Eslint和prettierrc配置、axios全局挂载 动态组件插槽体验插槽的基础用法作用域插槽 自定义指令Eslint和prettierrc配置prettierrc axios全局挂载 动态组件 动态组件指的是动态切换组件的显示与隐藏。 如何实现动态组件渲染 vue 提供了一个内置的…

Visual Studio 2022 CMake+MinGW+GDB 调试目标程序

前段时间笔者在使用MinGW编译了QtCreator后&#xff0c;想要进行调试。最开始使用VSCode进行调试&#xff0c;可是可以调试&#xff0c;但是发现调试过程中反应比较慢&#xff0c;毕竟QtCreator整个源代码工程还是非常大的&#xff0c;VSCode是由JS语言编写&#xff0c;执行效率…

Golang每日一练(leetDay0065) 位1的个数、词频统计

目录 191. 位1的个数 Nnumber of 1-bits &#x1f31f; 192. 统计词频 Word Frequency &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 191. 位1的个数 Nnum…

Java面试知识点(全)-JVM面试知识点一

[Java面试知识点(全) 导航&#xff1a; https://nanxiang.blog.csdn.net/article/details/130640392 注&#xff1a;随时更新 SQL优化 r m y s q l q u e r y ( " S E L E C T u s e r n a m e F R O M u s e r W H E R E s i g n u p d a t e > ′ r mysql_query(…

RK3568平台开发系列讲解(网络篇)图解linux ping

🚀返回专栏总目录 文章目录 一、SOCK_RAW套接字实现的ping二、ping命令发送端内核实现三、ping命令接收端内核实现沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 ping 命令采用 ICMP 协议,是一个用户空间程序,它打开一个 SOCK_RAW 套接字或者ICMP套接字发送ICMP_…

Chrome启动参数常用参数

Chrome常用参数请参考下表。 序号 参数 说明 1 --allow-outdated-plugins 不停用过期的插件。 2 --allow-running-insecure-content 默认情况下&#xff0c;https 页面不允许从 http 链接引用 javascript/css/plug-ins。添加这一参数会放行这些内容。 3 …

Python爬虫入门教程,BeautifulSoup基本使用及实践

Python爬虫入门教程&#xff0c;BeautifulSoup基本使用及实践 爬虫&#xff0c;是学习Python的一个有用的分支&#xff0c;互联网时代&#xff0c;信息浩瀚如海&#xff0c;如果能够便捷的获取有用的信息&#xff0c;我们便有可能领先一步&#xff0c;而爬虫正是这样的一个工具…

大数据之PySpark的RDD创建和分区

文章目录 前言一、RDD创建二、RDD分区数总结 前言 #博学谷IT学习技术支持# 上篇文章对PySpark的RDD做了简单的介绍&#xff0c;以及总结了RDD的特性&#xff0c;该篇文章主要介绍RDD的创建方式&#xff0c;PySpark的RDD创建方式主要有两种&#xff0c;一种是在程序中直接创建&…

11 dubbo源码学习_dubbo协议通信

dubbo在通信上也支持非常多的网络协议,而dubbo协议属于dubbo框架自研,整体协议也比较有代表性,采用定长协议头+变长协议休的形式; 1. dubbo协议格式 Magic - Magic High & Magic Low (16 bits)标识协议版本号,Dubbo 协议:0xdabbReq/Res (1 bit)标识是请求或响应。请…

「OceanBase 4.1 体验」|OCP Express

文章目录 一、简介二、特性介绍2.1 数据库管理2.2 数据库可观测性 一、简介 OCP Express 是一个基于 Web 的 OceanBase 4.x 轻量化管理工具&#xff0c;作为 OceanBase 数据库的工具组件&#xff0c;它集成在 OceanBase 数据库集群中&#xff0c;支持数据库集群关键性能指标查看…

MyBatis第一章 搭建MyBatis的运行环境

这里写自定义目录标题 一 创建Maven工程1 打包方式设置为jar2 引入依赖进去 二 创建MyBatis的核心配置文件1 配置核心文件2 创建mapper接口3 创建mabatis的映射文件4 测试文件的写法5 需要代码可以访问gitee仓库去看看6 log4j的日志功能 三 先改方法&#xff0c;后改映射文件1 …