类和对象【一】类和对象简介

文章目录

  • C++的类与C语言结构体的区别【引入类】
  • 类的定义
    • 类体中的成员函数的实现
    • 类中的访问限定符
    • C++中class和struct的区别
  • 类的作用域
  • 类的实例化
    • 类中成员的存储位置
    • 类的大小

C++的类与C语言结构体的区别【引入类】

  1. 类里面不仅可以定义变量还可以定义函数

    在这里插入图片描述

  2. 类具有封装性【将在该文章之后讲解】

  3. 类有构造函数,析构函数,this指针等特殊函数和语法【内容过多将在之后的文章中逐一讲解】


类的定义

class ClassName
{类体};  记得加分号
  • class是类的关键字

  • ClassName是自定义的类名

  • 类体所处的作用域是一个新的作用域,即类域每一个类都有自己的类域


在这里插入图片描述

类体中的成员函数的实现

有两种方式:

  1. 在类体里直接实现

    在这里插入图片描述
    注意:
    直接在类里实现,会向编译器传递内联函数的建议
    如果它函数体很小,编译器就可能会把它作为内联函数

  2. 在类内声明,类外实现

    在这里插入图片描述
    此时要在类外实现的函数的函数名前加::

因为类的{}中圈定了一个作用域【类域】

如果在类外实现它的成员函数不用类名+::限定的话,那个函数就是普通的全局函数
而不是类的类域中的成员函数


类中的访问限定符

一共3个

  1. public【公有的】
    public修饰的成员【包括数据成员和成员函数】在类外可以直接被访问
    在这里插入图片描述

  2. private【私有的】
    private 修饰的成员【包括数据成员和成员函数】在类外不可以直接被访问,只能在类体中/类的成员函数的函数体中直接访问【所以私有成员一般借助于公有的成员函数操作
    在这里插入图片描述

  3. protected【被保护的】
    protected修饰的成员【包括数据成员和成员函数】在类外也不可以直接被访问
    private修饰的成员一般是用于继承给子类的

注意点:

  • 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
    如果后面没有访问限定符,作用域就到 } 即类结束。

  • class定义的类的默认访问权限为privatestruct定义的类默认访问权限为public
    (因为struct要兼容C的结构体,而C的结构体中的成员就是结构体外都可以访问)


C++中class和struct的区别

C++需要兼容C语言,所以C++中struct可以定义结构体

另外C++中struct还可以用来定义类。
struct定义的类class定义类是很相似,区别是struct定义的类默认访问权限publicclass定义的类默认访问权限private
在这里插入图片描述

在这里插入图片描述


类的作用域

类定义了一个新的作用域【类域】,每一个类的作用域都不同
通过不同的类的类名+::区分类外实现成员函数属于哪一个类

在这里插入图片描述

通过不同的类实例化的对象区分调用的是哪一个类中的成员


在这里插入图片描述


类的实例化

类在还没有实例化出对象之前,它只是限定了实例化后对象的大小它的成员名字和类型
没有实例化出对象之前是不占内存的,只是声明

一个类可以实例化出多个对象实例化出的对象才占用内存,存储成员数据


类中成员的存储位置

成员变量:存放在实例化出的对象中不包括static修饰的成员变量,static修饰的成员变量之后会讲

每一个实例化出的对象都为自己的成员变量开辟了空间,用于存放属于自己的数据

成员函数:存放在公共的代码区

一个类中的成员函数被它任意一个实例化出的对象访问时访问到的函数体都是相同的,所以没有必要再每一个对象中存储成员函数的函数体

又因为类中的成语函数是属于它的类域的
所以其他的地方访问不了类的成员函数,只有类实例化出的对象可以访问到成语函数,所以没有必要再每一个对象中存储成员函数的地址

又因为类只是声明,没有开空间,所以类中存不了成员函数的地址/函数体

所以把类的成员函数存放在了普通函数存放的公共代码区


类的大小

类的大小就是类实例化出的对象的大小

根据类中成员的存储位置可知,类实例化出的对象中只存储了成员变量

所以 所有成员变量根据内存对齐后的总大小就是对象的大小


在这里插入图片描述

特别的:空类的大小也是一个字节

在这里插入图片描述
那一个字节不存储有效数据,那一个字节只表示这个类被定义了

编译器给了空类一个字节来唯一标识这个类的对象。

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

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

相关文章

关于nvm node.js的按照

说明:部分但不全面的记录 因为过程中没有截图,仅用于自己的学习与总结 过程中借鉴的优秀博客 可以参考 1,npm install 或者npm init vuelatest报错 2,了解后 发现是nvm使用的版本较低,于是涉及nvm卸载 重新下载最新版本的nvm 2…

云原生数据库海山(He3DB)PostgreSQL版核心设计理念

本期深入解析云原生数据库海山PostgreSQL版(以下简称“He3DB”)的设计理念,探讨在设计云原生数据库过程中遇到的工程挑战,并展示He3DB如何有效地解决这些问题。 He3DB是移动云受到 Amazon Aurora 论文启发而独立自主设计的云原生数…

Excel---一个工作簿中的多个sheet合并成一个PDF

0 Preface/Foreword 1 操作方法 1.1 方法一 文件》 导出 》创建PDF/XPS 》 选项 》发布内容 》“整个工作簿” 1.2 方法二 文件》 打印》 打印机选项中,选择一种PDF阅读器 》设置选项中,选择打印整个工作簿。

三步就能在OpenHarmony中实现车牌识别

介绍 本车牌识别项目是基于开源项目 EasyPR(Easy to do Plate Recognition)实现。EasyPR 是一个开源的中文车牌识别系统,基于 OpenCV 开源库开发。 本项目使用润和 HiSpark Taurus AI Camera(Hi3516DV300) 摄像头开发板套件(以下简称 Hi351…

对拍器/对数器 赛前抱佛脚

“对拍器/对数器的使用前提是该题你会暴力解法,如果不会,那么对拍器/对数器也没啥用。” 对拍器/对数器 应用背景 你有一个绝对对的暴力cpp代码,但时间会T,只适用于小范围的数据。所以你写了一个聪明的非暴力cpp代码&#xff0c…

【ctf.show】获得百分之百的快乐

1.打开靶场 2.根据页面代码,get请求值只能小于4位数,否则会回显hack! 尝试后确实是这样的: 请求值小于4位数,页面无变化: 发送请求值ls查看内容 3.根据2返回的值,发送值为?1>nl 创建一个nl…

vivado 使用基本触发器模式

使用基本触发器模式 基本触发器模式用于描述触发条件 , 即由参与其中的调试探针比较器组成的全局布尔公式。当“触发器模式 (Trigger Mode) ”设置为 BASIC_ONLY 或 BASIC_OR_TRIG_IN 时 , 即启用基本触发器模式。使用“基本触发器设置 (Basic Trig…

【面试题】细说mysql中的各种锁

前言 作为一名IT从业人员,无论你是开发,测试还是运维,在面试的过程中,我们经常会被数据库,数据库中最经常被问到就是MySql。当面试官问MySql的时候经常会问道一个问题,”MySQL中有哪些锁?“当我…

数据结构-----Lambda表达式

文章目录 1 背景1.1 Lambda表达式的语法1.2 函数式接口 2 Lambda表达式的基本使用2.1 语法精简 3 变量捕获3.1 匿名内部类3.2 匿名内部类的变量捕获3.3 Lambda的变量捕获 4 Lambda在集合当中的使用4.1 Collection接口4.2 List接口4.3 Map接口 HashMap 的 forEach() 5 总结 1 背…

第十三届蓝桥杯真题:x进制减法,数组切分,gcd,青蛙过河

目录 x进制减法 数组切分 gcd 青蛙过河 x进制减法 其实就是一道观察规律的题。你发现如果a这个位置上的数x&#xff0c;b这个位置上的数是y&#xff0c;那么此位置至少是max(x,y)1进制。一定要把位置找对啊 #include <bits/stdc.h> using namespace std; typedef l…

如何卸载干净 IDEA(图文讲解)

更新时间 2022-12-20 11:一则或许对你有用的小广告 星球 内第一个项目&#xff1a;全栈前后端分离博客项目&#xff0c;演示地址&#xff1a;Weblog 前后端分离博客, 1.0 版本已经更新完毕&#xff0c;正在更新 2.0 版本。采用技术栈 Spring Boot Mybatis Plus Vue 3.x Vit…

如何开辟动态二维数组(C语言)

1. 开辟动态二维数组 C语言标准库中并没有可以直接开辟动态二维数组的函数&#xff0c;但我们可以通过动态一维数组来模拟动态二维数组。 二维数组其实可以看作是一个存着"DataType []"类型数据的一维数组&#xff0c;也就是存放着一维数组地址的一维数组。 所以&…

【C++成长记】C++入门 | 命名空间、输入输出、缺省参数

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;C​​​​​​​❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、C和C语言的区别和联系 二、命名空间 1、命名空间定义 2、命名空间使用 三、C输…

基于yolov9来训练人脸检测

YOLOv9是一个在目标检测领域内具有突破性进展的深度学习模型&#xff0c;尤其以其在实时性与准确性上的优秀表现而受到广泛关注。针对人脸检测这一特定任务&#xff0c;YOLOv9通过其架构创新和算法优化提供了强大的支持。 YOLOv9在继承了YOLO系列&#xff08;如YOLOv7、YOLOv8&…

二叉树--相同的树

给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例 1&#xff1a; 输入&#xff1a;p [1,2,3], q [1,2,3] 输出&#xff1a;true 思路 一、…

JavaEE 初阶篇-深入了解 CAS 机制与12种锁的特征(如乐观锁和悲观锁、轻量级锁与重量级锁、自旋锁与挂起等待锁、可重入锁与不可重入锁等等)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 乐观锁与悲观锁概述 1.1 悲观锁&#xff08;Pessimistic Locking&#xff09; 1.2 乐观锁&#xff08;Optimistic Locking&#xff09; 1.3 区别与适用场景 2.0 轻…

C++高级特性:柯里化过程与std::bind(六)

1、柯里化过程 1.1、operator()的引入 现在需要完成这样一个需求&#xff1a;有一个函数每次调用返回的结果不一样。例如&#xff1a;两次调用的返回值都不一样那么就可以达到这种目的 1.1.1、简单点的写法 可以给一个全局的变量&#xff08;静态变量&#xff09;&#xff…

深入理解JVM垃圾收集器

相关系列 深入理解JVM垃圾收集算法-CSDN博客 目前市面常见的垃圾收集器有Serial、ParNew、Parallel、CMS、Serial Old、Parallel Old、G1、ZGC以及有二种不常见的Epsilon、Shenandoah的&#xff0c;从上图可以看到有连线的的垃圾收集器是可以组合使用&#xff0c;是年轻代老年代…

Input DropDown 拼接成 select组件(基于antd和react)

前言&#xff1a;为什么不直接用select&#xff0c;还要舍近求远搞inputdropdown这种缝合怪&#xff0c;是因为antd的select不支持选中项再编辑&#xff0c;效果如图 比如&#xff1a;选中的lucy文案变成了placeholder不能再编辑了 封装此组件虽然比较简单&#xff0c;但还是有…

PLC互连全攻略:Profinet和EthernetIP实操演示

在今日的技术分享中&#xff0c;将详细探讨实现Profinet和Ethernet/IP的通信配置&#xff0c;以连接西门子PLC&#xff08;Profinet&#xff09;和罗克韦尔PLC&#xff08;Ethernet/IP&#xff09;。本篇将重点介绍专为通信而设计的Profinet转Ethernet/IP网关&#xff0c;在联接…