【C++】类和对象一

news2024/11/14 18:04:59

今天来到了类和对象部分,我们知道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.coloradmin.cn/o/1236777.html

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

相关文章

单链表OJ--8.相交链表

8.相交链表 160. 相交链表 - 力扣&#xff08;LeetCode&#xff09; /* 解题思路&#xff1a; 此题可以先计算出两个链表的长度&#xff0c;让长的链表先走相差的长度&#xff0c;然后两个链表同时走&#xff0c;直到遇到相同的节点&#xff0c;即为第一个公共节点 */struct Li…

紧跟热点:教你如何快速掌握ChatGPT

2023年随着OpenAI开发者大会的召开&#xff0c;最重磅更新当属GPTs&#xff0c;多模态API&#xff0c;未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义&#xff0c;不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车…

【Mysql系列】LAG与LEAD开窗函数

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

怎么查看虚拟机的网关

1、点击编辑&#xff0c;再选择虚拟网络编辑器 2、选择VMnet8&#xff0c;点击NAT设置 3、查看网关IP

kafka权限认证 topic权限认证 权限动态认证-亲测成功

kafka权限认证 topic权限认证 权限动态认证-亲测成功 kafka动态认证 自定义认证 安全认证-亲测成功 MacBook Linux安装Kafka Linux解压安装Kafka 介绍 1、Kafka的权限分类 身份认证&#xff08;Authentication&#xff09;&#xff1a;对client 与服务器的连接进行身份认证…

Python批量备份交换机配置+自动巡检

自动巡检功能考虑到不同设备回显有所不同&#xff0c;需要大量正则匹配&#xff0c;暂时没时间搞这些&#xff0c;所以索性将命令回显全部显示&#xff0c;没做进一步的回显提取。 以下是程序运行示例&#xff1a;#自动备份配置&#xff1a; 备份完成后&#xff0c;将配置保存于…

机器学习的概念和类型

1、人工智能、机器学习、深度学习之间的关系 人工智能&#xff08;AI&#xff09;是广泛的概念&#xff0c;指赋予计算机智能特性。机器学习&#xff08;ML&#xff09;是AI的一个分支&#xff0c;是指通过计算机学习和改进性能。深度学习&#xff08;DL&#xff09;是ML的一类…

java疫情期间社区出入管理系统-计算机毕业设计源码21295

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对疫情期间社区出入管理等问题&#xff0c;对…

【开源】基于Vue和SpringBoot的创意工坊双创管理系统

项目编号&#xff1a; S 049 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S049&#xff0c;文末获取源码。} 项目编号&#xff1a;S049&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 管理员端2.2 Web 端2.3 移动端 三、…

并行与分布式计算 第8章 并行计算模型

文章目录 并行与分布式计算 第8章 并行计算模型8.1 并行算法基础8.1.1 并行算法的定义8.1.2并行算法的分类8.1.3算法的复杂度 8.2 并行计算模型8.2.1 PRAM (SIMD-SM)模型8.2.3 BSP (MIMD-DM)模型8.2.4LogP&#xff08;MIMD-DM&#xff09;模型 并行与分布式计算 第8章 并行计算…

小米集团收入增长失速已久:穿越寒冬,雷军的路走对了吗?

撰稿|行星 来源|贝多财经 11月20日&#xff0c;小米集团&#xff08;HK:01810&#xff0c;下称“小米”&#xff09;发布了截至2023年9月30日的第三季度业绩公告。 财报显示&#xff0c;在智能手机出货量下行、平均售价下跌的背景下&#xff0c;小米逆势而上&#xff0c;实现…

猫咪不长肉怎么回事?搬空家底的增肥效果好的猫罐头分享

秋冬到了&#xff0c;北方有供暖还好&#xff0c;咱南方的小猫咪全靠一身正气&#xff0c;不囤点脂肪天生怕冷的小猫咪要怎么过冬啊&#xff1f;咋吃都吃不胖的猫可愁怀铲屎官了&#xff0c;想想我新手养猫那些年&#xff0c;为了给我家猫养胖点我是做了不少努力&#xff0c;当…

Vuetify:定制化、响应式的 Vue UI 库 | 开源日报 No.83

vuetifyjs/vuetify Stars: 38.1k License: MIT Vuetify 是一个无需设计技能的 UI 库&#xff0c;具有精美手工制作的 Vue 组件。它具有以下核心优势和主要功能&#xff1a; 可定制性&#xff1a;使用 SASS/SCSS 进行广泛自定义&#xff0c;并提供默认配置和蓝图。响应式布局&…

Linux环境下安装部署单机RabbitMQ(离线)

摘要 本文档适用于在Linux系统下部署单体RabbitMQ&#xff0c;是在无网的情况下部署的。涉及的任何操作都是通过手动下载安装包然后上传到服务器上进行安装&#xff0c;因此也遇到一些问题&#xff0c;并在此文档中记录。 实际操作环境&#xff1a;Kylin V10&#xff0c;实际…

万宾科技智能井盖传感器,预防城市道路安全

随着城市交通的不断发展和城市化进程的加速推进&#xff0c;城市道路安全问题日益凸显。市政井盖作为城市道路的一部分&#xff0c;承担着重要的交通安全保障职责。然而传统的市政井盖管理方式存在许多不足。针对这些问题政府需要采取适当的措施&#xff0c;补足传统管理方式的…

这些仪表板常用的数据分析模型,你都见过吗?

本文由葡萄城技术团队发布。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 ##前言 在数字化时代&#xff0c;数据已经成为了企业决策和管理的重要依据。而仪表板作为一种数据可视化工具&#x…

腾讯云轻量数据库开箱测评,1核1G轻量数据库测试

腾讯云轻量数据库1核1G开箱测评&#xff0c;轻量数据库服务采用腾讯云自研的新一代云原生数据库TDSQL-C&#xff0c;轻量数据库兼100%兼容MySQL数据库&#xff0c;实现超百万级 QPS 的高吞吐&#xff0c;128TB海量分布式智能存储&#xff0c;虽然轻量数据库为单节点架构&#x…

服务器 jupyter 文件名乱码问题

对于本台电脑&#xff0c;autodl服务器&#xff0c;上传中文文件时&#xff0c;从压缩包名到压缩包里的文件名先后会出现中文乱码的问题。 Xftp 首先是通过Xftp传输压缩包到Autodl服务器&#xff1a; 1、打开Xftp&#xff0c;进入软件主界面&#xff0c;点击右上角【文件】菜…

智能座舱架构与芯片 - (1) 背景篇

一、软件定义汽车 1.1 什么是软件定义汽车 软件定义汽车(Software Defined Vehicles, SDV)的核心思想是&#xff0c;决定未来汽车的是人工智能为核心的软件技术&#xff0c;而不再是汽车的马力大小&#xff0c;是否真皮座椅&#xff0c;机械性能的好坏。软件定义汽车的终极目…