c++之类与对象<一>

目录

一:类的引入 

二:类的两种定义方式 

1.声明和定义都放在类中

2.类声明放在.h文件中,将成员函数定义放在.cpp文件中 

三:类的访问限定符及封装 

1.访问限定符

2.使用规则

3.c++中struct和class的区别是什么 

4.封装

四:类的实例化 

五:计算类的大小 

1.类的大小的计算同结构体一样,遵循对齐规则

2.每个对象的成员变量是不一样的,需要单独存储

3.每个对象调用成员函数是一样的,放到共享公共区域(代码段)

4.如果只有成员函数或者空类的话,大小是1,这1byte不存储有效数据,只是用来占位,标记对象被实例化定义出来了

六:this指针

1.this指针存在哪里 

2.空指针问题


接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧

一:类的引入 

1.因为c++兼容c语言,所以在c语言结构体的基础上发展为可以在结构体内部声明和实现函数,并用class代替struct关键字

 

在访问时便要定义对象,然后用结构体访问成员变量那样去访问成员函数 和成员变量

二:类的两种定义方式 

1.声明和定义都放在类中

注:成员函数在类中,则会被认为内联函数

2.类声明放在.h文件中,将成员函数定义放在.cpp文件中 

此时成员函数需要加类名::

 

三:类的访问限定符及封装 

1.访问限定符

public(公有),private(私有),protected(保护)

2.使用规则

1.public修饰的成员在类外可以直接访问

2.protected和private修饰的成员在类外不能直接被访问

3.访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止

4.如果后面没有访问限定符,作用于就到}即类结束

5.class的默认访问权限为private,struct为public(因为struct要兼容c)

3.c++中struct和class的区别是什么 

c++要兼容c语言,所以c++中的struct可以当作结构体使用。另外c++中struct还可以用来定义类,和class定义类是一样的,区别是struct定义的类默认访问权限是public,class定义的类默认访问权限是private.在继承和模板参数列表位置,也是有区别的

4.封装

面向对象的三大特性:封装,继承和多态

封装: 将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互

四:类的实例化 

简单来说就是开空间

五:计算类的大小 

1.类的大小的计算同结构体一样,遵循对齐规则

可以看出成员变量在类中,成员函数不在类中 

2.每个对象的成员变量是不一样的,需要单独存储

3.每个对象调用成员函数是一样的,放到共享公共区域(代码段)

4.如果只有成员函数或者空类的话,大小是1,这1byte不存储有效数据,只是用来占位,标记对象被实例化定义出来了

六:this指针

如果我们同时定义两个对象,那么再调用成员函数时如何确定调用准确,或者在用成员函数初始化时,成员变量只是声明,没有定义,无空间,是如何接收值的呢,这些就得用到this指针来说明了

 

从上面例子就可以看出其实在底层实现上是传定义的对象的地址的,当然空间就是对象的空间了 

在实际过程中不能写this指针,它是由编译器处理完成的

1.this指针存在哪里 

存在栈中因为他是隐含形参/vs下面是通过ecx寄存器

2.空指针问题

1.由上面知,成员函数是不在类中的,调用时会直接转化为指令,去代码段找,并没有对ptr指针直接解引用 ,而ptr指针是用来规定域,不去全局找,而是去指定的域中寻找;ptr指针本身作为this指针传过去

2.Init函数中会对this指针进行解引用,会报错,其他两个并没有对传过去的this指针进行解引用,正常运行

3.最后尤其空指针调用成员函数,不一定报错,得看成员函数中对传过去的this指针有无解引用

 

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

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

相关文章

抖音平台热销的本腾和新讯随身WiFi,哪个更靠谱,更值得购买?

经常有粉丝朋友摆脱小编测评一下在某短视频平台上面非常火爆的两款随身WiFi,本腾随身WiFi和新讯随身WiFi到底哪个更好。今天,小编就为大家带来最真实的体验测评。 一、外观和产品 这方面新讯要比本腾做的更好,本腾的设备相对单一一些。新讯则…

鸿蒙Harmony应用开发—ArkTS(@Link装饰器:父子双向同步)

子组件中被Link装饰的变量与其父组件中对应的数据源建立双向数据绑定。 说明: 从API version 9开始,该装饰器支持在ArkTS卡片中使用。 概述 Link装饰的变量与其父组件中的数据源共享相同的值。 限制条件 Link装饰器不能在Entry装饰的自定义组件中使用…

滑动窗口:流量控制的有效手段

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Docker 【通过Dockerfile构建镜像】【docker容器与镜像的关系】

文章目录 前言一、前期的准备工作二、上手构建一个简单的镜像三、DcokerFile1 指令总览2 指令详情 四、Dockerfile文件规范五、docker运行build时发生了什么?六、调试手段1. 修改镜像打包后,如何验证新内容已更新至镜像 七、Dockerfile优化方案 前言 docker构建镜…

超快的 AI 实时语音转文字,比 OpenAI 的 Whisper 快4倍 -- 开源项目 Faster Whisper

faster-whisper 这个项目是基于 OpenAI whisper 的模型,在上面的一个重写。 使用的是 CTranslate2 的这样的一个库,CTranslate2 是用于 Transformer 模型的一个快速推理引擎。 在相同精度的情况下,faster-whisper 的速度比 OpenAI whisper …

【模板】AcWing873. 《欧拉函数》(C++)

【题目描述】 给定 n 个正整数 ,请你求出每个数的欧拉函数。 欧拉函数的定义 【输入格式】 第一行包含整数 n。 接下来 n 行,每行包含一个正整数 。 【输出格式】 输出共 n 行,每行输出一个正整数 的欧拉函数。 【数据范围】 1≤n≤1…

从零开始学习在VUE3中使用canvas(六):lineCap(线条端点样式)

一、简介 lineCap能够让我们设置线条的端点样式,例如 1. butt const ctx canvas.getContext("2d");ctx.lineCap "butt"; // 默认样式,也可以显式指定 2.round const ctx canvas.getContext("2d");//圆头ctx.lineCap …

信号量(semaphore):解决并发问题的有力工具

信号量(semaphore):解决并发问题的有力工具 记得操作系统课程中,导师曾提出一个引人深思的观点:“信号量几乎可以应对所有的并发问题。”虽然这句话的真实度有待商榷,但不可否认的是,信号量为我…

VUE3.0(一):vue3.0简介

Vue 3 入门指南 什么是vue Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界…

iOS应用审核问题解决方案及优化方法 ✨

摘要 本文将针对iOS应用提交审核时可能遇到的问题,如“你必须在Xcode中添加com.apple.developer.game-center密钥”,以及突然间提交送审报错情况进行探讨。通过大量查询资料和尝试,结合案例分析,提供了解决方案和优化方法&#x…

【leetcode热题】 位1的个数

编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 1 的个数(也被称为汉明重量)。 提示: 请注意,在某些语言(如 Java)中…

深入理解MySQL中的JOIN算法

码到三十五 : 个人主页 心中有诗画,指尖舞代码,目光览世界,步履越千山,人间尽值得 ! 目录 一、引言二、嵌套循环连接(Nested-Loop Join)2.1 工作原理2.2 性能考虑2.3 优化策略 三、块嵌套循环…