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

文章目录

  • 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…

设计模式: 行为型之中状态模式(20)

状态模式概述 状态模式(State Pattern)是一种行为设计模式,它允许对象在内部状态改变时改变其行为状态模式通过为每个状态定义一个类,使得对象在其内部状态改变时,可以改变其行为 状态模式应用 // 定义状态接口 int…

小红书2020校招算法笔试题卷一 编程题no.3 击败魔物

题目 击败魔物 薯队长来到了迷宫的尽头,面前出现了N只魔物,Hi表示第i只魔物的血量,薯队长需要在T个回合内击败所有魔物才能获胜。每个回合薯队长可 以选择物理攻击一只魔物,对其造成1点伤害(物理攻击次数无上限&#x…

【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 常用关键字总结

MySQL关键字是指在MySQL中具有特殊含义和功能的保留字。以下是一些常用的MySQL关键字及其作用: 1. SELECT:用于从数据库中检索数据。 2. INSERT:用于向数据库中插入新的行。 3. UPDATE:用于更新数据库中的现有数据。 4. DELETE&a…

【面试题】细说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…

蓝桥杯20年第十一届国赛-答疑|贪心

题目链接&#xff1a; 蓝桥杯2020年第十一届国赛真题-答疑 - C语言网 (dotcpp.com) 思路&#xff1a; 这道题 计算的是时刻之和&#xff0c;写出这个时刻之和的计算式子&#xff0c;以下的si&#xff0c;ai的i为任意次序答疑的同学编号 &#xff0c;不等于输入的顺序 时刻之…

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

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

没有网没有移动存储的情况下两台电脑如何互相传输数据

无网无移动存储情况下两台电脑数据互传探秘 一、直连网线传输数据二、局域网文件共享其他 在信息化时代的今天&#xff0c;电脑作为重要的数据处理工具&#xff0c;在日常生活和工作中扮演着不可或缺的角色。然而&#xff0c;有时我们会遇到一些特殊情况&#xff0c;如没有网络…

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

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

DOTS Unity.Physics物理引擎碰撞事件处理

最近DOTS发布了正式的版本,同时基于DOTS的理念实现了一套高性能的物理引擎&#xff0c;今天我们给大家分享和介绍一下这个物理引擎的碰撞事件处理以及核心相关概念。 Unity.Physics物理引擎的主要流程与Pipeline Unity.Physics物理引擎做仿真迭代计算的时候主要通过以下步骤来…

【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&…