60天干翻C++———— C++ 类和对象

news2025/2/26 7:28:51

C++类和对象

  • 类和对象的引入
    • 类的限定符
    • 类的特性
    • 类的作用域
    • this 指针
  • 默认成员函数
    • 构造函数
    • 析构函数
    • 拷贝构造函数
    • 运算符重载
    • const成员

类和对象的引入

在c语言中,“数据”和“处理数据的函数“是分开声明的,也就是说c语言本身不支持”数据和函数“之间的关联性。也就是说数据处理方法和数据是分离的,举个例子 我们要打印一个学生的成绩
在这里插入图片描述
但是在C++中,student有可能采用独立的“抽象数据模型”
在这里插入图片描述
抽象的类 将数据和处理方式联系在了一起,更加有利于对数据的管理,既然C++这么好,那么我们一起来学习吧。

类的限定符

观察上图 我们看到了 在这里插入图片描述
那么限定符有什么用呢,还有没有别的限定符呢
在这里插入图片描述
【访问限定符说明】

  1. public修饰的成员在类外可以直接被访问
  2. protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)
  3. 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
  4. class的默认访问权限为private,struct为public(因为struct要兼容C)

类的特性

类的三大特性 封装 继承 多态 在类和对象初级阶段 主要学习封装。大家注意到有一个private的限定符 ,这样外面就访问不到类里面的数据。只能通过给出的接口进行。这样做一切就有了规章制度,一切都在规定下进行。

类的作用域

在内外定义的类的成员变量需要说明 举个例子
在这里插入图片描述

this 指针

我们还是看一个学生类:
在这里插入图片描述
如果我们对他进行如下操作:

int main()
{
	student s1, s2;
	s1.ADD(65, 54);
	s2.ADD(87, 88);
	return 0;
}

那么问题就来了 ,调用的是一个函数吗,如果是同意个函数怎么区分的呢?
先回答第一个问题,他是一个同一个函数,那么他是怎么区分的呢?
这里就要说到这个this指针
C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参
数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有成员变量的操作,都是通过该
指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。

接下来我们尝试打印this指针

在这里插入图片描述
注意事项 this的空指针问题

在这里插入图片描述

默认成员函数

在这里插入图片描述

构造函数

在这里插入图片描述
构造函数的特点:

  1. 构造函数无返回值
  2. 构造函数可以重载
  3. 构造函数在对象实例化的时候自动调用
  4. 函数名与类名相同
    在这里插入图片描述
    上述程序显示了,对象实例化时自动调用构造函数。
    #//
    构造函数功能:
  5. 内置类型不做处理
  6. 自定义类型自动调用构造函数

在这里插入图片描述
默认构造函数的三种类型:

  1. 无参数的 2. 全缺省的 3. 系统默认生成的

在这里插入图片描述
默认构造函数只能是上述三种,否则则会缺乏默认构造函数。默认构造函数只能有一个。

析构函数

上面是对象初始化的构造函数,下面是对象销毁的析构函数。析构函数有以下特点

  1. 析构函数名是在类名前加上字符 ~。
  2. 无参数无返回值类型。
  3. 一个类只能有一个析构函数。若未显式定义,系统会自动生成默认的析构函数。注意:析构
    函数不能重载
  4. 对象生命周期结束时,C++编译系统系统自动调用析构
    下面我们以date类为例:
    在这里插入图片描述
    析构函数的最大作用就是防止内存泄露,如果没有内存申请则可以不写。如果有内存开辟,如栈等,则需要释放内存。

拷贝构造函数

拷贝构造函数是构造函数的一种,也是系统自动调用。拷贝构造有深浅拷贝,编译器默认生成的是浅拷贝。
浅拷贝下图为例:
在这里插入图片描述
当你拷贝的类里面有开辟空间时就需要深拷贝。深拷贝是可以给拷贝的类开辟新的空间的拷贝。
注意:如果对栈等需要开辟空间的类,如果使用浅拷贝,则导致在析构函数中一块内存释放两次。
在这里插入图片描述

运算符重载

C++为了增加函数可读性,引入了运算符重载.运算符重载在一定程度上简化了代码。
使用运算符 必须注意: 不要改变原符号的意思!!!
2. 这五个不可以重载: . :: sizeof ?: .* 注意以上5个运算符不能重载。
重载的格式为: 返回类型 operator (符号) ()

在这里插入图片描述
例如某个日期的另一天,在这里我们不具体写出函数体。后面我们会整体实现函数类,以语法复习介绍为主。
在这里插入图片描述
在这里插入图片描述
this指针是内部函数的第一个参数,重载在内部函数也是如此。
重载函数可以显示调用,也可重载调用。
在这里插入图片描述
前置++和后置++的问题
在c++中通过在传参中加入int表明为后置++
在这里插入图片描述
=的重载: =实际可以看做构造函数使用。内置类型的成员直接拷贝。开辟空间的成员变量重新分配空间。

const成员

const是权限的缩小。const成员只能调用const成员函数
在这里插入图片描述
const修饰的是this指针。
注意const指针: 不能扩大权限,可以缩小权限。

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

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

相关文章

实战之-Redis商户查询缓存

一、什么是缓存? 前言:什么是缓存? 就像自行车,越野车的避震器 举个例子:越野车,山地自行车,都拥有"避震器",防止车体加速后因惯性,在酷似"U"字母的地形上飞跃,硬着陆导致的损害,像个弹簧一样; 同样,实际开发中,系统也需要"避震器",防止过高…

西门子1200和西门子200smart S7通讯

S7通讯是西门子以太网络通讯中最简单最常用的通讯。 下面来介绍200smart和1200之间如何进行S7通讯: 由于200smart和1200使用不同的编程软件,所以只能使用单端组态,我们这里以1200为客服端组态。 1.首先打开博图软件添加1200设备,这里选择1…

代码随想录算法训练营第23天 | 669. 修剪二叉搜索树 + 108.将有序数组转换为二叉搜索树 + 538.把二叉搜索树转换为累加树

今日任务 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树 总结篇 669. 修剪二叉搜索树 - Medium 题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 给你二叉搜索树的根节点 root &#xf…

【多线程】认识Thread类及其常用方法

📄前言: 本文是对以往多线程学习中 Thread类 的介绍,以及对其中的部分细节问题进行总结。 文章目录 一. 线程的 创建和启动🍆1. 通过继承 Thread 类创建线程🍅2. 通过实现 Runnable 接口创建线程🥦3. 其他方…

九、K8S-label和label Selector

label和label selector 标签和标签选择器 1、label 标签: 一个label就是一个key/value对 label 特性: label可以被附加到各种资源对象上一个资源对象可以定义任意数量的label同一个label可以被添加到任意数量的资源上 2、label selector 标签选择器 L…

Cellinx NVT 摄像机 UAC.cgi 任意用户创建漏洞复现

0x01 产品简介 Cellinx NVT IP PTZ是韩国Cellinx公司的一个摄像机设备。 0x02 漏洞概述 Cellinx NVT 摄像机 UAC.cgi接口处存在任意用户创建漏洞,未经身份认证的攻击者可利用此接口创建管理员账户,登录后台可查看敏感信息,使系统处于极不安全的状态。 0x03 复现环境 FO…

【JavaEE进阶】 图书管理系统开发日记——壹

文章目录 🌲序言🌴前端代码的引入🎋约定前后端交互接口🍃后端服务器代码实现🚩UserController.java🚩BookController.java ⭕总结 🌲序言 该图书管理系统,博主将一步一步进行实现。…

JVM工作原理与实战(十九):运行时数据区-方法区

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、运行时数据区 二、方法区 1.方法区介绍 2.方法区在Java虚拟机的实现 3.类的元信息 4.运行时常量池 5.字符串常量池 6.静态变量的存储 总结 前言 JVM作为Java程序的运行环境…

【4k】4k的webrtc播放示例

目录 使用带研发角色的账号,在app端设置下分辨率 : 4k 点播 ffplay播放看下详细的参数 使用带研发角色的账号,在app端设置下分辨率 : 4k 点播 ffplay播放看下详细的参数

Gartner:2024年及未来中国网络安全重要趋势

Gartner于今日发布2024年及未来中国网络安全重要趋势。 Gartner高级研究总监高峰表示:“随着人工智能(AI)等重大技术突破的出现、工作方式的社会性变革以及地缘政治的转变都意味着技术采购可能必须完全在境内实施,且数据和系统可…

【前端HTML】HTML基础

文章目录 HTML标签标签属性 基本结构文档声明HTML标准结构HTML基础排版标签语义化标签块级元素与行内元素文本标签图片标签超链接跳转到指定页面跳转到文件跳转到锚点唤起指定应用 列表有序列表无序列表列表嵌套自定义列表 表格基本结构常用属性跨行跨列 常用标签表单基本结构常…

2024年甘肃省职业院校技能大赛信息安全管理与评估 样题三 模块一

竞赛需要完成三个阶段的任务,分别完成三个模块,总分共计 1000分。三个模块内容和分值分别是: 1.第一阶段:模块一 网络平台搭建与设备安全防护(180 分钟,300 分)。 2.第二阶段:模块二…

实验一 安装和使用Oracle数据库

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的…

【MYSQL】存储引擎MyISAM和InnoDB

MYSQL 存储引擎 查看MySQL提供所有的存储引擎 mysql> show engines; mysql常用引擎包括:MYISAM、Innodb、Memory、MERGE 1、MYISAM:全表锁,拥有较高的执行速度,不支持事务,不支持外键,并发性能差&#x…

springBoot项目打包发布

打包 项目代码编写完成后&#xff0c;在pom.xml文件中引用打包的插件&#xff1a; <!-- 打包插件坐标--><build><plugins><!--打包插件--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-mave…

Docker 容器连接

Docker 容器连接 前面我们实现了通过网络端口来访问运行在 docker 容器内的服务。 容器中可以运行一些网络应用&#xff0c;要让外部也可以访问这些应用&#xff0c;可以通过 -P 或 -p 参数来指定端口映射。 下面我们来实现通过端口连接到一个 docker 容器。 网络端口映射 …

Leetcode24-找到两个数组中的公共元素(2956)

1、题目 给你两个下标从 0 开始的整数数组 nums1 和 nums2 &#xff0c;它们分别含有 n 和 m 个元素。 请你计算以下两个数值&#xff1a; 统计 0 < i < n 中的下标 i &#xff0c;满足 nums1[i] 在 nums2 中 至少 出现了一次。 统计 0 < i < m 中的下标 i &…

三、Sharding-JDBC系列03:自定义分片算法

目录 一、概述 1.1、分片算法 精确分片算法 范围分片算法 复合分片算法 Hint分片算法 1.2、分片策略 标准分片策略 复合分片策略 行表达式分片策略 Hint分片策略 不分片策略 二、自定义分片算法 - 复合分片算法 (1)、创建数据库和表 (2)、自定义分库算法 (3)、…

如何实现数据库读一致性

1 导读 数据的一致性是数据准确的重要指标&#xff0c;那如何实现数据的一致性呢&#xff1f;本文从事务特性和事务级别的角度和大家一起学习如何实现数据的读写一致性。 2 一致性 1.数据的一致性&#xff1a;通常指关联数据之间的逻辑关系是否正确和完整。 举个例子&#…

中北数据结构2023真题

雪雾: 设计一个算法&#xff0c;将一个节点值为自然数的单列表拆分成两个单列表&#xff0c;原表中值为偶数的节点保留&#xff0c;而值为奇数的节点&#xff0c;按他们在原表的相对次序组成一个新的单列表 #include <stdio.h> #include <stdlib.h>typedef struct…