关于Mysql中的索引与事务

news2024/12/23 14:22:49

索引

定义

索引:为了提高查找效率而使用的一种数据结构把数据组织起来,可以把索引理解在书的目录或字典的检索表(拼音检索)

索引是一种特殊的文件,可以包含着对数据表里的所有记录的引用指针,对表中的一列或多列创建索引,并指定索引类型,各类索引有各自的数据结构实现

为什么要用索引

使用索引的主要目的是提高数据检索性能查询效率。以下是一些使用索引的重要原因:

1. 快速数据访问:索引允许数据库系统快速定位和访问表中的数据行,而无需扫描整个表。这对于大型数据集和复杂查询尤为重要,可以显著减少查询的执行时间。

2. 加速搜索操作:当执行搜索、过滤和排序操作时,索引可将数据库系统的工作量大大降低,因为它们提供了一种有效的方式来查找匹配特定条件的数据(使用B+树)。

3. 提高性能:通过减少查询的时间复杂度,索引可以显著提高数据库的性能和响应时间。这对于需要快速响应用户请求的应用程序尤为重要。

4. 减少磁盘I/O:索引通常存储在内存中,这可以减少磁盘I/O的需求。磁盘I/O通常是数据库查询中的性能瓶颈之一,因此索引可以显著降低I/O操作的次数。

5. 支持唯一性约束:索引可以用于确保数据库表中的数据列具有唯一值,这是通过唯一性约束来实现的。唯一索引可防止重复的数据。

6. 支持外键约束:索引可以用于支持外键约束,确保在不同表之间的引用完整性。外键通常涉及到索引的创建,以提高引用表的查询性能。

7. 支持复杂查询:索引可帮助优化复杂查询,包括联接操作、聚合函数和多个筛选条件的查询。它们可以加速这些查询的执行。

尽管索引提供了这些重要的性能优势,但也需要权衡。索引的创建和维护会占用额外的存储空间和计算资源,并且可能会导致写入操作的性能开销。因此,索引的设计和维护需要仔细考虑,以满足特定应用程序的需求,并确保不会引入不必要的复杂性。

索引使用的数据结构

索引使用的数据结构是B+树,在了解B+树前,我们先了解一下B树

B树

我们学习B树之前一定学过二叉搜索树与二叉平衡树这两种数据结构,这里简单提及一下

二叉平衡树(Balanced Binary Tree)和二叉搜索树(Binary Search Tree)是两种不同的二叉树数据结构,它们具有一些相似之处,但也有重要的区别。

二叉搜索树 (Binary Search Tree,BST):

  1. 特性: 二叉搜索树是一种二叉树,其中每个节点的左子树包含的所有节点的值都小于该节点的值,而右子树包含的所有节点的值都大于该节点的值。这个特性使得在BST中进行快速的查找、插入和删除操作成为可能。

  2. 性能: 在平均情况下,BST的查找、插入和删除操作的时间复杂度为O(log N),其中N是树中节点的数量。但如果树失衡,最坏情况下时间复杂度可达O(N),这是因为BST没有保证平衡。

二叉平衡树 (Balanced Binary Tree):

  1. 特性: 二叉平衡树是一种二叉树,它在BST的基础上添加了一个重要的性质,即树的高度保持平衡。这意味着树的左子树和右子树的高度差不会太大,通常不超过1。

  2. 性能: 由于保持平衡的性质,二叉平衡树的查找、插入和删除操作在最坏情况下也能保持O(log N)的时间复杂度。这使得它在数据结构中的性能更加稳定,而不容易出现极端情况。

二叉搜索树和二叉平衡树是一种很优秀的排序算法,但是这里也是存在一种问题,我们在实际应用的时候,面对的数据是海量的,那么树的深度会大大提升,花费的时间也会变得很大,所以我们就引入了多叉搜索树来解决问题。

特点

1.每个节点可以有多个子树,M 阶 B 树表示该树每个节点最多有 M 个子树

2.每个中间节点有 k-1 个关键字(可以理解为数据)和 k 个子树 (k 介于阶数 M 和 M/2 之间,M/2 向上取整)

3.所有叶子节点都在同一层,并且叶子节点只有关键字,指向孩子的指针为 null

4.若根结点不是终端结点,则至少有2棵子树

B+树

B+树叶子节点包含所有数据,并且0是一个循环双向链表,这样组织数据更有利范围查找。

 

特点:

1.关键字数和子树相同

2.非叶子节点仅用作索引,它的关键字和子节点有重复元素

3.叶子节点用指针连在一起

优点:

1.B+树非叶节点不存储数据,同样大小的磁盘页可以容纳更多的节点,io次数会减少

2.B+树每次查询都要到叶节点,所以查询性能稳定

3.B+树由于所有数据都在叶子节点上,并且有序相连,范围查询非常友好

事务

事务(Transaction)是数据库管理系统(DBMS)中的一个重要概念,用于管理对数据库的一系列操作,以确保数据库的一致性、隔离性、持久性和原子性,通常用于处理数据库中的数据更改

特点

  1. 原子性(Atomicity): 事务是一个不可分割的操作单元,要么全部执行,要么全部回滚。如果在事务执行中发生故障,数据库会自动回滚事务,确保数据的一致性,防止不完整的操作。

  2. 一致性(Consistency): 事务在执行前后,必须将数据库从一个一致状态转变为另一个一致状态。这意味着事务的执行不会违反数据库的完整性约束,如唯一性、参照完整性等。

  3. 隔离性(Isolation): 多个事务可以并行执行,但它们应该互不干扰,互相隔离。隔离性确保了每个事务在查看和修改数据时不会看到其他事务未提交的中间状态,以防止数据不一致和竞态条件。

  4. 持久性(Durability): 一旦事务成功提交,其结果应该永久保存在数据库中,即使系统崩溃或重启,也不应该丢失。

 下面 我们举例说明事务特点:

原子性:

假设有一个银行应用,一个用户要进行银行转账操作,将100元从账户A转账到账户B。这个操作可以分为以下几步:

  1. 从账户A中减少100元。
  2. 向账户B中增加100元。

现在,考虑以下情况:

  • 如果第一步(减少账户A的金额)成功,但第二步(增加账户B的金额)失败,会出现什么情况?账户A会减少100元,但账户B不会增加相应的金额。这会导致数据不一致。

  • 反之,如果第一步失败(例如,由于余额不足),但第二步成功,也会导致数据不一致。

原子性的目标是避免这种中间状态。如果在一个事务中的任何一步失败,整个事务都应该被回滚,以恢复到操作之前的状态。这确保了数据的完整性和一致性。在上述示例中,如果第一步或第二步失败,整个转账操作应该被回滚,以确保不会发生不一致的情况。

原子性在事务中的应用是确保事务的完整性,即要么全部执行,要么不执行。这是数据库管理系统和应用程序在处理事务时的重要特性,以防止不完整的操作或数据不一致。

一致性:

考虑一个存储银行账户信息的数据库。在该数据库中,有一个账户余额(balance)字段,以及一个存款限制(deposit limit)字段。存款限制规定每个账户的存款不能超过1000元。

现在,考虑以下两个并发执行的事务:

事务1: 要求将1000元存入账户A。

事务2: 要求将2000元存入账户A。

如果没有一致性的保证,事务1和事务2可以同时执行,导致以下问题:

  • 事务1存入1000元后,账户A的余额变为1000元。
  • 事务2存入2000元后,账户A的余额变为3000元。

这违反了存款限制的规则,因为存款不能超过1000元。这会导致数据不一致。

为了确保一致性,数据库管理系统应该在事务执行前检查存款限制的规则,并在事务2尝试存入2000元时拒绝操作。这样,数据库保持一致性,不会违反规则,账户A的余额仍然为1000元。

一致性要求事务操作遵守数据库中定义的规则和约束,以确保数据的完整性和一致性。它确保数据库在事务执行前后保持合法性和规则的完整性,不会违反数据库中的定义规则。这有助于防止数据不一致或不合法的状态。

隔离性:

假设有两个并发执行的事务,事务A和事务B。两者都要执行以下操作:

事务A:

  1. 读取账户A的余额。
  2. 将100元从账户A转账到账户B。
  3. 更新账户A的余额。
  4. 提交事务A。

事务B:

  1. 读取账户A的余额。
  2. 向账户A存入50元。
  3. 更新账户A的余额。
  4. 提交事务B。

如果没有隔离性,可能会出现以下问题:

  1. 事务A在步骤1之后读取了账户A的余额,然后在步骤3之前将100元转账给账户B。
  2. 与此同时,事务B在步骤1之后也读取了账户A的余额,然后在步骤3之前向账户A存入50元。

这会导致问题,因为两个事务都在不同时间读取了相同的数据,然后进行了操作。这可能导致数据不一致或金额错误。

隔离性的作用是确保这种情况不会发生。通过使用事务隔离级别(例如,读未提交、读提交、可重复读和串行化),数据库管理系统可以控制事务之间的可见性,以确保它们不会相互干扰。这意味着在一个事务中所做的更改在另一个事务看来要么是不可见的,要么在第一个事务完成后才可见。

在上述示例中,如果事务A和事务B采用合适的隔离级别,它们的操作不会互相干扰,从而避免了潜在的数据一致性问题。隔离性确保了多个事务可以并发执行,而不会破坏数据的完整性和一致性。不同的隔离级别提供不同程度的隔离,以满足不同应用场景的需求。

持久性:

假设一个在线购物网站的数据库记录了用户的订单信息。当用户下订单时,系统将创建一个订单并将其存储在数据库中。一旦用户的订单被确认并提交,数据库应该确保这个订单数据是持久的,即使在订单提交后发生了以下情况:

  1. 系统崩溃: 如果数据库系统在订单提交后崩溃,订单数据不应该丢失。当系统重新启动时,订单数据应该继续存在。

  2. 断电: 如果数据库服务器突然断电,订单数据应该在重新上电后仍然存在。

  3. 硬件故障: 即使数据库服务器的硬件组件(如硬盘)发生故障,数据库系统应该有适当的冗余和备份机制,以确保数据可以从备份中恢复。

  4. 人为错误: 即使管理员或数据库操作人员犯了错误,删除了订单或执行了不正确的操作,数据库应该有记录或备份,以便数据可以恢复。

持久性确保了一旦事务成功提交,数据库不会失去已提交的数据。这对于关键业务数据的安全性和可靠性至关重要,尤其是在需要可靠性和持久性的应用程序中,如金融、医疗保健和电子商务系统。持久性通常通过数据的备份、日志记录和冗余存储等手段来实现。

事务操作

事务通常包括以下操作:

  1. 开始事务(BEGIN): 标志事务的开始点,通常表示事务的操作要开始执行。

  2. 执行操作: 在事务中执行数据库操作,如插入、更新、删除数据等。

  3. 提交事务(COMMIT): 事务成功执行完成后,提交事务,将操作结果永久保存到数据库中。

  4. 回滚事务(ROLLBACK): 如果事务执行中发生错误或违反了某些规则,可以回滚事务,取消所有操作,使数据库恢复到事务开始之前的状态。

事务隔离级别

脏读

脏读是指一个事务读取了另一个正在进行的事务中尚未提交的数据。这种情况可能导致问题,因为未提交的数据可能会在后续操作中被撤销或更改,从而使读取的数据无效。

举例说明:

  1. 有两个并发执行的事务,事务A和事务B。
  2. 在事务A中,用户从账户A中查询余额,得到1000元。
  3. 在事务B中,用户尝试从账户A中取出200元,但该操作尚未提交。

问题在于,事务A在查询账户A的余额时读取了未提交的数据,也就是1000元。在这个时刻,事务B的操作(尝试从账户A中取出200元)尚未完成,因此账户A的余额尚未减少。

现在,考虑以下两种可能的情况:

  • 如果事务B的操作最终成功,账户A的余额会减少200元,变为800元。这是因为200元已被取出。
  • 如果事务B的操作在后续的操作中被回滚(例如,由于余额不足),账户A的余额会恢复到原始状态,也就是1000元。

这就是问题所在。事务A读取的数据(1000元)在后续操作中可能会变得无效,因为它取决于事务B的操作是否成功或失败。这导致了不一致性,因为事务A最初的查询结果不再反映实际的账户余额。

与从账户A中取200元的关系在于,事务B的操作(取款)可能会更改账户A的余额,因此与事务A的查询操作相关,可能导致事务A读取了不再准确的数据。这就是脏读的本质:读取了未提交或可能被回滚的数据,从而导致数据不一致。

解决脏读问题:

1、给⼀个写操作的事务加上⼀把锁,在写这个事务从开始时加锁,事务提交或加滚的时候释放锁,被加锁的事务不能与其他事务共存,写锁也叫排他锁

2、可以把当前数据库的隔离级别设置成READ-COMMITTED读已提交,就避免了脏读问题

不可重复读

 不可重复读(Non-Repeatable Read)是数据库中的一个并发问题,它发生在一个事务在两次读取同一数据时,得到了不一致的结果。这可能是因为另一个并发事务在两次读取之间修改了数据。

让我用一个示例来说明不可重复读:

  1. 假设有两个并发执行的事务,事务A和事务B。

  2. 在事务A中,用户从数据库中读取账户A的余额,得到1000元。

  3. 在事务B中,用户执行以下操作:

    • 增加账户A的余额100元。
    • 提交事务B。
  4. 然后,在事务A中,用户再次读取账户A的余额,得到1100元。

在这个示例中,事务A两次读取了同一个数据,即账户A的余额,但结果不一致。第一次读取是1000元,而第二次读取是1100元。这是因为在两次读取之间,事务B修改了数据,增加了100元。

不可重复读的问题在于,事务A在两次读取之间看到了不一致的数据状态。这可能会导致数据分析或决策出现问题,因为数据在短时间内发生了变化,而事务A并没有意识到这一点。

为了解决不可重复读的问题,数据库管理系统提供了不同的隔离级别,如"读未提交"、"读提交"、"可重复读"和"串行化"。在较高的隔离级别下,不可重复读问题通常是不允许的,数据库会保证事务之间的数据一致性。不同的隔离级别提供不同程度的隔离,以满足应用程序的需求。

幻读

幻读(Phantom Read)是数据库中的另一个并发问题,类似于不可重复读,但它发生在一个事务在两次查询同一个范围的数据时,得到了不一致的结果。幻读通常与插入或删除操作有关,即使在两次查询之间没有其他事务修改数据,也会导致数据不一致。

让我用一个示例来说明幻读:

  1. 假设有两个并发执行的事务,事务A和事务B。

  2. 在事务A中,用户从数据库中查询了所有账户余额大于1000元的记录,得到3个账户。

  3. 在事务B中,用户执行以下操作:

    • 插入了一个新的账户,余额为1500元。
    • 提交事务B。
  4. 然后,在事务A中,用户再次查询了所有账户余额大于1000元的记录,得到4个账户。

在这个示例中,事务A两次查询了相同的范围,即账户余额大于1000元的记录,但结果不一致。第一次查询得到3个账户,而第二次查询得到4个账户。这是因为在两次查询之间,事务B插入了一个新的记录,导致第二次查询结果发生了变化。

幻读的问题在于,它可能会导致查询结果不稳定,即使没有其他事务修改了数据。这对需要准确的查询结果的应用程序可能是一个问题,因为结果可能会在短时间内发生变化,而事务A并不知道。

为了解决幻读问题,数据库管理系统通常提供不同的隔离级别,如"读未提交"、"读提交"、"可重复读"和"串行化"。在较高的隔离级别下,幻读通常是不允许的,数据库会保证事务之间的数据一致性。不同的隔离级别提供不同程度的隔离,以满足应用程序的需求。

隔离级别

隔离级别(Isolation Level)是数据库管理系统提供的一种设置,用于控制多个并发事务之间的可见性和互操作方式。隔离级别规定了事务之间的隔离程度,以确保数据库操作的一致性和可靠性。不同的隔离级别提供了不同程度的隔离,以满足不同应用程序的需求。

常见的数据库隔离级别包括以下四个:

  1. 读未提交(Read Uncommitted): 这是最低的隔离级别,允许一个事务读取另一个事务尚未提交的数据。这意味着脏读、不可重复读和幻读都是可能的。这个级别提供了最高的并发性,但牺牲了数据一致性。

  2. 读提交(Read Committed): 在这个级别下,一个事务只能读取已经提交的数据。这消除了脏读,但仍然允许不可重复读和幻读。这是许多数据库系统的默认隔离级别。

  3. 可重复读(Repeatable Read): 在这个级别下,事务可以读取已经提交的数据,并且在事务的生命周期内,其他事务不能修改或插入新的数据,以确保不可重复读和幻读不会发生。这提供了更高的数据一致性,但可能会导致一些并发性降低。

  4. 串行化(Serializable): 这是最高的隔离级别,它确保事务彼此之间完全隔离,不允许并发操作。在串行化级别下,事务将一个接一个地执行,消除了所有并发问题,但牺牲了并发性能。

选择适当的隔离级别取决于应用程序的需求和性能要求。更高的隔离级别提供了更高的数据一致性,但通常会导致更低的并发性能。较低的隔离级别提供了更高的并发性能,但可能会导致一些并发问题。开发人员需要根据应用程序的要求权衡这些因素,并选择适当的隔离级别来确保数据的完整性和一致性。

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

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

相关文章

jQuery实现输入框提示并点击回显功能呢

html代码: <input type"text" id"affOrganization" name"affOrganization" class"form-control" placeholder"Search..." style"width: 300px" > <div class"search_suggest" id"gov_se…

模拟退火算法(SA)求解旅行商问题(TSP)python

目录 一、模拟退火算法求解TSP&#xff08;city14&#xff09;的python代码 二、city14的运行结果 三、 模拟退火算法求解TSP&#xff08;city30&#xff09;的python代码 四、city30的运行结果 一、模拟退火算法求解TSP&#xff08;city14&#xff09;的python代码 impor…

中文编程开发语言工具构件说明:屏幕截取构件的编程操作

屏幕截取 用于截取指定区域的图像。 图 标&#xff1a; 构件类型&#xff1a;不可视 重要属性 l 截取类型 枚举型&#xff0c;设置在截取屏幕时的截取类型。包括&#xff1a;全屏幕、指定区域、活动窗口三种。当全屏幕截取时相当于执行了硬拷屏&#xff08;PrintScre…

优化Scrum敏捷需求管理流程,敏捷需求如何管理。

​优化敏捷需求管理流程的方法可以参照如下&#xff1a; 明确需求 。在项目开始时&#xff0c;要确保清楚地理解客户需求&#xff0c;明确项目的目标和范围&#xff0c;以便能够在敏捷迭代中快速响应需求变更。 使用用户故事 。采用用户故事的方式&#xff0c;让客户和开发团…

虚拟化、容器与Docker基本介绍以及安装部署(Docker 基本管理)

目录 1 Docker 概述 1.1 Docker与虚拟机的区别 1.2 容器在内核中支持2种重要技术 1.3 Docker核心概念 2 安装 Docker 2 Docker 镜像操作 2.1 搜索镜像 2.2 获取镜像 2.3 镜像加速下载 2.4 查看镜像信息 2.4.1 查看下载的镜像文件信息 2.4.2 查看下载到本地的所有镜像…

【STL】bitset的模拟实现

⭐博客主页&#xff1a;️CS semi主页 ⭐欢迎关注&#xff1a;点赞收藏留言 ⭐系列专栏&#xff1a;C进阶 ⭐代码仓库&#xff1a;C进阶 家人们更新不易&#xff0c;你们的点赞和关注对我而言十分重要&#xff0c;友友们麻烦多多点赞&#xff0b;关注&#xff0c;你们的支持是我…

HTML5有哪些新特性?移除了哪些元素?

HTML5引入了许多新特性&#xff0c;以下是其中一些主要的新特性&#xff1a; 1&#xff1a;语义化元素&#xff1a;HTML5引入了一些新的语义化元素&#xff0c;如 <header>、<footer>、<nav>、<article>、<section>等&#xff0c;使得页面结构…

计算机组成原理 new09 定点数的移位运算

文章目录 原码/正数反码/正数补码的算术移位负数反码的算术移位负数补码的算术移位算术移位总结符号扩展算术移位的应用真值的算术移位逻辑移位逻辑移位的运用 循环移位不带进位位的循环移位(小循环)带进位位的循环移位(大循环)原码定点一位乘法原码定点一位乘法(手算) (这里我…

【Qt控件之QToolBox】介绍及使用

概述 QToolBox类提供了一个列式的带有选项卡的小部件条目。工具箱是一个小部件&#xff0c;以一个列式的选项卡显示在上方&#xff0c;并在当前选项卡下方显示当前的小部件条目。每个选项卡在选项卡列中有一个索引位置。选项卡的小部件条目是一个QWidget。 每个小部件条目都有…

婚纱摄影行业,还在使用电梯广告?不如试试大数据精准营销

以武汉为例&#xff0c;婚纱摄影的以薇拉&#xff0c;青禾&#xff0c;韩国艺匠&#xff0c;果石&#xff0c;等品牌为主&#xff0c;竞争尤其惨烈&#xff0c;婚纱摄像婚庆行业主要依赖于线下推广&#xff08;如依靠与酒店、婚礼策划等上下游产业合作&#xff09;&#xff0c;…

Google Colab免费GPU使用教程

目录 前言一、Google Colab介绍二、使用步骤1、创建谷歌云盘2、创建一个新的Colab Notebook3、设置免费的GPU4、挂载Google Drive5、运行代码 三、防止掉线措施四、参考 前言 有时候本地跑代码可能耗时比较久&#xff0c;而且还会耽误你本地电脑的使用&#xff0c;购买云服务器…

智能矩阵系统解决的问题?

智能矩阵系统可以解决的问题多种多样&#xff0c;它主要通过人工智能技术应用于矩阵系统&#xff0c;解决一些传统方法难以处理的问题。 以下是一些常见的应用场景&#xff1a; 1. 数据管理&#xff1a;智能矩阵系统可以有效地管理大量的数据&#xff0c;包括数据的存储、检索…

【已解决】Unity 使用NPOI 写word文档报错:System.TypeLoadException:……0.86.0.518

报错显示 System.TypeLoadException: Could not resolve type with token 01000080 from typeref (expected class ICSharpCode.SharpZipLib.Zip.UseZip64 in assembly ICSharpCode.SharpZipLib, Version0.86.0.518, Cultureneutral, PublicKeyToken1b03e6acf1164f73) at NPOI.…

C++初阶--类与对象(1)

文章目录 类的引入类的定义访问限定符类成员的注意事项变量名的冲突 类的实例化类成员的声明与定义类的大小this指针特性 总结 类的引入 在c语言中&#xff0c;我们会这样写一个栈&#xff1a; struct Stack {int* a;int top;int capacity; };void StackInit(struct Stack* p…

利用Bootstrap的分页组件实现分页效果

在网页开发过程中&#xff0c;如果碰到内容过多的情况&#xff0c;一般都会使用分页处理。 在<ul>元素上添加pagination类&#xff0c;在<li>元素上添加page-item类&#xff0c;在超链接中添加 page-link类&#xff0c;即可实现一个简单的分页。 目录 00-基础知识…

STM32项目工程的搭建

视频连接&#xff1a; [2-1]--入门 新建工程 及 工程搭建 -------------_哔哩哔哩_bilibili 1.STM32开发方式 1.标志库 表示直接调用已经写好的程序&#xff0c;通过类似于函数调用直接使用即可。 2.HAL库 程序员自己手动的操作寄存器进行编程 2.工程模板 3.搭建工程的步骤 1…

微信小程序OA会议系统数据交互

前言 经过我们所写的上一文章&#xff1a;微信小程序会议OA系统其他页面-CSDN博客 在我们的是基础面板上面&#xff0c;可以看到出来我们的数据是死数据&#xff0c;今天我们就完善我们的是数据 后台 在我们去完成项目之前我们要把我们的项目后台准备好资源我放在我资源中&…

Memcached和Memcache安装(64位win10)

Memcached和Memcache安装&#xff08;64位win10&#xff09; 一、Memcached和Memcache的区别&#xff1a;   网上关于Memcached和Memcache的区别的理解众说纷纭&#xff0c;我个人的理解是&#xff1a;   Memcached是一个内存缓存系统&#xff0c;而Memcache是php的一个扩展…

虚假KeePass网站利用Google Ads和Punycode推送恶意软件

导语 近日&#xff0c;一起利用Google Ads和Punycode进行恶意软件传播的事件引起了广泛关注。该事件利用虚假KeePass下载网站&#xff0c;通过Punycode编码伪装成KeePass密码管理器的官方域名&#xff0c;并在Google Ads广告中推广&#xff0c;诱导用户下载恶意软件。这种新型的…

C++初阶(四)类和对象

文章目录 一、面向过程和面向对象初步认识二、类的引入三、类的定义1、类的概述2、类的两种定义3、成员变量命名规则的建议 四、类的访问限定符及封装1、访问限定符2、封装 五、类的作用域六、类的实例化七、类对象模型1、如何计算类对象的大小2、 类对象的存储方式猜测3、 验证…