【C++】类和对象一

今天来到了类和对象部分,我们知道C语言是面向过程编程,而C++是面向对象编程,那么怎么个具体实现方法呢?简单来说,就是C语言对结构体的定义和对结构体的操作是分开的,这样就显得过程很独立;而C++是把结构体和函数是定义在一起的,当然在这里我们把结构体升级成了类,这就是我们所说的类和对象中的类
下面我们来对比一下C语言和C++中的不同,我们用C语言写一个结构体和函数

#include<stdio.h>
#include<assert.h>
typedef struct QueueNode {struct QueueNode* next;int val;
}QNode;typedef struct Queue {QNode* front;QNode* rear;int size;
}Que;void QueueInit(Que* pq) {assert(pq);pq->front = NULL;pq->rear = NULL;pq->size = 0;
}void QueuePush(Que* pq, int x) {//......
}

这是我们写C语言时的一些操作,看以看到它的函数和结构体是分离的,下面看一下C++是怎么实现栈的

#include<iostream>
using namespace std;
struct stack {int* _a;int _top;int _capacity;void Init() {_a = nullptr;_top = 0;_capacity = 0;}void Push(int x) {//....}
};

我们可以看到,函数都写到了类的里面,这就是面向对象的一个特征
而在正常的C++中呢?我们习惯把struct换成class并且引入访问限定符,访问限定符有public意思是外部可以访问,还有一个private,意思是外部无法访问,当然class如果不写访问限定符有的话是私有的,而struct是外部可以访问的
我们在写类的成员函数时要把声明和定义分离,因为默认在类里面定义的函数就是内联函数,所以我们一般把短小的函数的定义放到类里面当作内联使用,效率比较高,而其它的函数则声明和变量分离
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
类或者是类创建的对象的大小只考虑成员变量,而计算所有成员变量的大小时则要考虑内存对齐
下面是一个我写的关于内存对齐的一篇文章
链接:内存对齐
那如果是一个类中没有成员变量呢?那么它的大小就是一个字节这个字节不存储有效数据,只能证明它存在过
在这里插入图片描述
不知道你有没有发现,我在栈的初始化函数中没有传任何参数,但是在函数定义时我还是能调用栈中的成员变量,这是因为编译器会隐藏的传一个this指针,这个指针就是指向你要操作的对象,this指针不能显示的传但是能显示的用
在这里插入图片描述
这里的this指针是不能更改指向的
在这里插入图片描述
报错说左操作数必须为左值
在这里插入图片描述
下面有这样的一个程序,判断这个程序会不会报错
在这里插入图片描述

这个程序其实是不会报错的,因为虽然p是一个空指针,但是我并没有去访问p指向的对象的成员变量,我只是调用了一个函数,并且这个函数的地址也没有存放在对象中,而这个p->的意思仅仅是告诉编译器我调用的是A类中的函数
但凡改成打印_a的话,它就会运行时崩溃

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

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

相关文章

MYSQL 关键字相似度排序

1、参考别人的相似度函数 CREATE FUNCTION levenshtein_distance(s1 VARCHAR(255), s2 VARCHAR(255)) RETURNS INT DETERMINISTIC BEGINDECLARE s1_len, s2_len, i, j, c,cost,cmin INT;DECLARE s1_char CHAR;DECLARE cv0, cv1 VARCHAR(255);SET s1_len CHAR_LENGTH(s1), s2_…

windows11记事本应用程序无法打开,未响应,崩溃,卡死

windows11记事本应用程序无法打开&#xff0c;未响应&#xff0c;崩溃&#xff0c;卡死 文章目录 问题描述搜索引擎&#xff08;度娘&#xff09;卸载后如何安装问题未解决另一个解决方案&#xff1a;步骤&#xff1a;1.设置 → 语音和区域 → 输入2.选择“高级键盘设置”3.替…

LeetCode - 622. 设计循环队列(C语言,顺序存储结构,配图)

目录 ​编辑定义结构体&#xff1a; 1. MyCircularQueue(k): 构造器&#xff0c;设置队列长度为 k 2. Front: 从队首获取元素。如果队列为空&#xff0c;返回 -1 3. Rear: 获取队尾元素。如果队列为空&#xff0c;返回 -1 4. enQueue(value): 向循环队列插入一个元素。…

C/C++ 常见数组排序算法

本文介绍了几种常见的排序算法的实现&#xff0c;包括冒泡排序、选择排序、插入排序、希尔排序、归并排序和快速排序。冒泡排序通过多次遍历数组&#xff0c;比较并交换相邻元素&#xff0c;逐步将较小元素“浮”到数组顶端&#xff0c;时间复杂度为O(n^2)。选择排序通过选择未…

基于springboot实现在线外卖平台系统项目【项目源码】

基于springboot实现在线外卖平台管理系统演示 Java技术 Java是由SUN公司推出&#xff0c;该公司于2010年被oracle公司收购。Java本是印度尼西亚的一个叫做爪洼岛的英文名称&#xff0c;也因此得来java是一杯正冒着热气咖啡的标识。Java语言在移动互联网的大背景下具备了显著的…

ElasticSearch 同步的方式

ElasticSearch 同步的方式 ElasticSearch是一款强大的分布式搜索和分析引擎&#xff0c;支持多种方式同步数据和日志。下面介绍几种常见的同步方式&#xff1a; 1. Logstash Logstash 是 ElasticStack 的一部分&#xff0c;用于收集、处理和转发日志和事件数据。通过配置 Lo…

运动耳机哪个牌子好?盘点最值得入手的五款运动耳机

现在&#xff0c;不入耳的运动耳机成了许多运动爱好者的首选&#xff0c;我也不例外&#xff0c;不得不说骨传导耳机跟运动真的很搭&#xff0c;不仅佩戴稳固不掉落&#xff0c;而且防水好&#xff0c;可以说是最值得入手的运动耳机&#xff0c;为了避免大家在选购运动耳机的时…

电脑磁盘怎么设置密码?磁盘加密软件哪个好?

电脑磁盘经常被用于存放各种重要数据&#xff0c;而为了避免数据泄露&#xff0c;我们需要为磁盘设置密码&#xff0c;以防止未授权人员使用磁盘。那么&#xff0c;电脑磁盘怎么设置密码呢&#xff1f;下面我们就一起来了解一下。 如何设置磁盘密码&#xff1f; 想要为磁盘设置…

计算机毕业设计项目选题推荐(免费领源码)java+springboot+mysql社区团购APP 02043

目录 摘要 1 绪论 1.1 研究背景 1.2国内外研究现状 1.3本课题主要工作 1.4论文结构与章节安排 2 社区团购系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.…

简于外 强于内,联想全新ThinkCentre M90a Pro Gen4以强劲性能开启商

近日&#xff0c;联想发布了最新一代商用台式一体机联想ThinkCentre M90a Pro Gen4。作为联想ThinkCentre M大师系列的旗舰产品&#xff0c;其配备了优质的显示屏&#xff0c;拥有强大的性能和稳定安全的特性&#xff0c;能够满足多样的工作场合&#xff0c;为商用一体机的行业…

Java核心知识点整理大全6-笔记

目录 4.1.4. 线程生命周期(状态) 4.1.4.1. 新建状态&#xff08;NEW&#xff09; 4.1.4.2. 就绪状态&#xff08;RUNNABLE&#xff09;&#xff1a; 4.1.4.3. 运行状态&#xff08;RUNNING&#xff09;&#xff1a; 4.1.4.4. 阻塞状态&#xff08;BLOCKED&#xff09;&#xff…

五、程序员指南:数据平面开发套件

服务质量 (QoS) 框架 本章介绍 DPDK 服务质量 (QoS) 框架。 21.1 带有 QoS 支持的数据包流水线 下图显示了一个具有 QoS 支持的复杂数据包处理流水线的示例 表21.1&#xff1a;带有 QoS 支持的复杂数据包处理流水线 这个流水线可以使用可重用的 DPDK 软件库构建。在这个流…

Java注解

文章目录 java注解概述注解原理是什么注解的作用&#xff1a;java注解的分类系统注解元注解自定义注解 Java常用注解Spring Web MVC 注解Spring Bean 注解Spring Boot注解Jpa全局异常处理SpringCloud容器配置注解Spring DI注解配置注解mybatis注解 java注解概述 注解&#xff…

【工具】java判断某个时间是否在时间范围区间内

【工具】java判断某个时间是否在时间范围区间内 import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date;public class Example {public static void main(String[] args) throws ParseException {// 要判断的时间String timeString &qu…

HarmonyOS ArkTS语言,运行Hello World(一)

一、下载与安装DevEco Studio 在HarmonyOS应用开发学习之前&#xff0c;需要进行一些准备工作&#xff0c;首先需要完成开发工具DevEco Studio的下载与安装以及环境配置。 进入DevEco Studio下载官网&#xff0c;单击“立即下载”进入下载页面。 DevEco Studio提供了Windows…

【前端学java】java中的包装类(11)

往期回顾&#xff1a; 【前端学java】JAVA开发的依赖安装与环境配置 &#xff08;0&#xff09;【前端学 java】java的基础语法&#xff08;1&#xff09;【前端学java】JAVA中的packge与import&#xff08;2&#xff09;【前端学java】面向对象编程基础-类的使用 &#xff08…

【深度学习】不用Conda在PP飞桨Al Studio三个步骤安装永久PyTorch环境

在 PaddlePaddle AI Studio 中使用 Python 虚拟环境安装 PyTorch 免责声明 在阅读和实践本文提供的内容之前&#xff0c;请注意以下免责声明&#xff1a; 侵权问题: 本文提供的信息仅供学习参考&#xff0c;不用做任何商业用途&#xff0c;如造成侵权&#xff0c;请私信我&am…

OpenAI董事会秒反悔!奥特曼被求重返CEO职位

明敏 丰色 发自 凹非寺 量子位 | 公众号 QbitAI 1天时间&#xff0c;OpenAI董事会大变脸。 最新消息&#xff0c;他们意在让奥特曼重返CEO职位。 多方消息显示&#xff0c;因为“投资人的怒火”&#xff0c;OpenAI董事会才在一天时间里来了个大反转。 微软CEO纳德拉被曝在得…

【nlp】2.8 注意力机制拓展

注意力机制拓展 1 注意力机制原理1.1 注意力机制示意图1.2 Attention计算过程1.3 Attention计算逻辑1.4 有无attention模型对比1.4.1 无attention机制的模型1.4.2 有attention机制的模型1 注意力机制原理 1.1 注意力机制示意图 Attention机制的工作原理并不复杂,我们可以用下…

springBoot整合quartz定时任务

声明 Quartz是一种基于java实现的任务调度框架&#xff0c;可以定时自动的执行你想要执行的任何任务。 官网&#xff1a;quartz官网 利用Quartz的定时任务技术可以应用于许多不同的场景&#xff0c;帮助我们实现定时执行任务、数据清理、缓存刷新、邮件发送、数据备份、系统监…