当前位置: 首页 > news >正文

C++中的类与对象

类与对象

我们在C语言中自定义的struct 叫做结构体,而在C++中我们把struct升级为了类,并且还加入了一个class,也称为类,那么我们今天就来看一下结构体和类的不同和相同

1.结构体与类

我们在C语言中的结构体是struct,而在我们的C++中升级成了类

我们先看一下它们有什么不同

我们先看一下C语言中结构体是如何定义的,这个是我们在C语言中的结构体,如果我们像定义一个obj的对象该怎么弄?

 

我们看到就是这样,我们需要把struct也写上,所以在C语言中o变量的类型就是struct obj,那么如果我们在C++中该怎么做呢?

我们在C++中struct升级为了类,而在C++中,我们的obj就是对象名,但是我们也可以前面加struct,因为这是为了兼容C语言的语法,不过如果想在C语言中也直接使用obj也是可以的,需要在前面加typedef这个就不演示了

2.类 

既然struct在C++中升级为了类,那么C++中其他的类的特性是什么?

我们下面来看一下。

在C++中除了struct可以定义自定义类型外还可以用class来定义,我们先用struct来看一下

由于C语言的封装性太差,我们可以直接访问到类里面的对象,所以使用起来并不是特别的好,那么在C++中,我们还可以在类里面写函数,我们还加入了访问限定符(private protected public)这三个限定符的作用是有不同的作用

下面我们来看一下

2.1 访问限定符

首先是private

 这个是private,这个有什么作用呢??

如果我们想访问这里面的三个变量中的任意一个可以吗??

 

我们看到是不可以的,因为private的意思是私有,在private到下一个访问限定符之前里面的成员函数或者是成员变量都是在该类外面不可访问的,所以不可以直接这样访问

下面在看一下protected

 

如果是protected呢?

我们还是访问里面三个变量中的任意一个 

 

我们看到protected和private在这里一样都是在类外面不可访问的,这里看不出他们的区别,后面会有不一样的,这里先不说

还剩一个public

 

这时候我们还是访问里面的变量

 

这时候我们再看一下 ,我们访问能不能成功

我们看到 这时候是可以访问的,并且还可以修改

2.2 struct 和 class的区别

那么steuct和class的区别是什么呢??

同样是自定义类型他们的区别在哪里呢?

我们来看一下

如果我们不给访问限定符会怎么样?

这时候我们没有给访问限定符,我们想访问一下这里面的变量可以吗?

 

 

我们看到是可以的 

那么如果这时候我们换成class会怎么样呢??

我们现在还是访问里面的变量

 

 

我们看到是不可以访问的,并且我们看到显示stack里面的a是private的,这里说明我们的class没有给访问限定符,但是默认访问限定符是private的,而我们的struct默认访问限定符是public的

结构体和类的区别 (2)

在C语言结构体中,里面只可以放变量,但是在类中我们还可以放函数

我们来看一下,因为这样可以更好的管理

我们还可以这样,把属于这个类的函数也放在这个类里面,在类里面的函数我们成为成员函数,在类里面的函数,而会自动成为内联函数 

那么如果我们想调用这个类里面的函数怎么调用呢??

我们在类里面的函数我们直接这样调用

 我们直接  “对象.“调用

我们来看一下

我们调用成功

2. 隐藏的this指针

我们来看一个类

 我们这里有一个日期类

我们继续看

我们现在定义两个日期类的对象,并且初始化一个,然后我们就分别打印两个对象我们会发送什么呢?

 

我们一个是缺省值,另一个是给定的值

但是我们调用这个Print函数为什么会打印出不同的内容呢?也就是我们可以分别打印出d1 和 d2的值呢?

这是为什么呢??

这里直接说了,因为在我们成员函数中都有一个默认的this指针

 

就像这样,如果调用这两个函数,我们的d1. 和 d2. 分别会传入Print函数,就像这样

 

然后我们打印的时候是这样打印

 

我们就是这样调用,那么我们传入的时候也是这样

 

我们调用的时候就是把d1和d2这样传入进去

但是我们在对成员函数传参的时候,我们不能显示的传入this指针,也不能显示的在函数参数那里显示的加上this指针 

而this指针的传入1编译器就帮我们做了,所以我们也不需要显示的传,但是我们可以在函数中显示的使用

就像这样,我们可以显示的使用

正是因为有这个this指针,所以我们可以准确的打印出对应变量里面的值

所以如果我们想写这个函数的Init函数我们可以直接这样

 

我们可以这样初始化

 

我们打印看一下

 

我们看到是可以的,这个就是隐藏的this指针 

 

相关文章:

C++中的类与对象

类与对象 我们在C语言中自定义的struct 叫做结构体,而在C中我们把struct升级为了类,并且还加入了一个class,也称为类,那么我们今天就来看一下结构体和类的不同和相同 1.结构体与类 我们在C语言中的结构体是struct,而…...

探索Qt图像处理的奥秘:从入门到精通

探索Qt图像处理的奥秘:从入门到精通(Exploring the Secrets of Qt Image Processing: From Beginner to Expert) 引言:Qt图像处理的概述和应用(Introduction: Overview and Applications of Qt Image Processing&#…...

springboot+vue企业人事人力资源管理系统java公司员工出差考勤办公OA系统

“简易云”是这个系统的名字 (6)系统管理:主要下拉分为角色管理、菜单管理; 角色管理:此页面可对角色进行增删改查操作,可修改不同角色的权限; 菜单管理:此页面可配置系统可展示的菜…...

设计模式-模板模式在Java中的使用示例

场景 模板模式 模板模式又叫模板方法模式(Template Method Pattern),是指定义一个算法的骨架,并允许子类为一个 或者多个步骤提供实现。 模板模式使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤,属于行为型设计模式。 模…...

回溯算法及其应用

回溯是一种常见的算法思想,用于解决许多优化问题。该算法的核心思想是穷举所有可能的解决方案,然后通过剪枝来减少不必要的计算,以获得最优解。 回溯算法常用于求解组合、排列、子集和等问题。通常情况下,回溯算法需要递归地搜索…...

如何一步步打造完美的成绩查询系统平台?

想要搭建一个高效的在线发布成绩查询系统平台,首先需要了解哪些技术和工具是必备的。本文将为您介绍一些主流的技术和工具,帮助您快速搭建一个稳定、安全、易用的成绩查询系统。 想要制作在线成绩查询系统平台有两种方式,第一种是直接使用易…...

P1026 [NOIP2001 提高组] 统计单词个数

题目描述 给出一个长度不超过 200200 的由小写英文字母组成的字母串(该字串以每行 2020 个字母的方式输入,且保证每行一定为 2020 个)。要求将此字母串分成 �k 份,且每份中包含的单词个数加起来总数最大。 每份中包含…...

CTFHub | eval执行

0x00 前言 CTFHub 专注网络安全、信息安全、白帽子技术的在线学习,实训平台。提供优质的赛事及学习服务,拥有完善的题目环境及配套 writeup ,降低 CTF 学习入门门槛,快速帮助选手成长,跟随主流比赛潮流。 0x01 题目描述…...

IP协议头

IP 4位版本号(version)4位头部长度(header length)8位服务类型(Type Of Service)16位总长度(total length)16位标识(id)3位标志字段13位分片偏移(…...

【xxl-job定时任务框架详解】

一,分布式任务调度 基本概念 分布式任务调度是一种用于在分布式环境中调度和执行任务的技术。在分布式系统中,由于存在多台服务器、多个进程和线程并行执行,因此需要一种机制来协调和管理任务的执行,避免任务冲突、重复执行、负载不均衡等问题。分布式任务调度通常由一个…...

7、在vscode上利用cmake构建多文件C++工程

文章目录 (1)创建如下工程文件夹:其中头文件放在include文件夹中,源文件放在src文件夹中(2)在vscode上打开工程文件夹,在对应的文件夹内建立相应的文件1)目录结构2)各文件…...

Linux操作系统网络模块

Linux操作系统的网络模块是负责网络通信的核心部分。它通过实现各种协议和算法,使得计算机能够在网络中进行数据交换和通信。网络模块主要包括以下几个方面的功能: (1)IP协议栈:负责处理网络层的数据包,实…...

不同批次板子采集到的传感器压力值不同

问题描述: M340B空压机主控板在接正常压力气源时,显示屏显示压力值过高并报警。 问题排查: 确认可能的故障点:压力传感器、硬件电路(供电电路、分压电路、ADC采样电路等)、单片机、软件; 排…...

设计模式--原型模式

目录 基本介绍 传统方式克隆 原型模式改进 浅拷贝和深拷贝 浅拷贝的介绍 深拷贝的介绍 原型模式的注意事项和细节 基本介绍 (1) 原型模式(prototype模式): 用原型实例指定创建对象的种类 并且通过拷贝这些原型 创建新的对象 (2) 原型模式是一种创建型设计模式 允许一个…...

C++智能指针shared_ptr详解

智能指针shared_ptr详解 一、简介二、底层原理2.1、引用计数2.2、shared_ptr的构造和析构2.3、shared_ptr的共享和拷贝2.4、循环引用问题 三、shared_ptr的使用3.1、创建一个shared_ptr3.2、共享一个shared_ptr3.3、使用删除器3.4、解除关联 四、使用示例总结 一、简介 C智能指…...

家政服务APP小程序开发功能详解

随着人们生活水平的提高,对家政服务的要求也越来越高。而传统的到家政公司寻找服务人员的方法显然已经无法满足人们需求,取而代之的是线上预约家政服务。家政服务App小程序软件可以满足用户在线预约,还可以根据自己的需求定制家政服务、选择家…...

【C++】deque的实现原理简单介绍

前言 deque被称为双端队列,它的出现主要是为了结合vector和list的优点并减小它们的缺点,实际上deque确实结合了vector和list的优点减小了它们的缺点,但是它的结合也让它自己的优点没有原始的vector和list那么极致,导致deque变得很…...

UWB隧道人员定位技术应用,施工作业安全精准保障

隧道施工的安全不仅关系到工程项目的质量和施工效率,也关系到我国的资金安全、施工人员和人民的生命财产安全。如何有效加强隧道施工的安全管理能力,成为隧道施工企业管理者最关心的问题。国家铁道局在《关于加强铁路隧道工程安全工作的若干意见》中指出…...

15.2 矩阵链乘法

1.代码 public class MatrixChainMultiplication {public static void main(String[] args) { // 在该代码中,我们首先创建了两个n * n的矩阵m和s,分别用于记录最优值和分割点。 其中m 矩阵 通过i j 来显示在i到j的矩阵链中最优解 // // …...

向隐形冠军学习:聚焦人效,用时间管理提效益

注: 本文来源于盖雅工场联合创始人兼CEO 章新波 在2023狮山论坛“ 向隐形冠军学习: 聚焦人效,用时间管理提效益 ”的主题分享。 文|章新波 整理 |盖雅学苑 在人力资源行业以及各大企业,「人效」这个词…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...

【位运算】消失的两个数字(hard)

消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...