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

【GL010】C/C++总结(二)

C++部分

1. C++中类成员的访问权限

无论成员被声明为 public、protected 还是 private,都是可以互相访问的,没有访问权限的限制。在类的外部 (定义类的代码之外),只能通过对象访问成员,并且通过对象只能访问 public 属性的成员,不能访问 private、protected 属性的成员。

protected:受保护的,类内和子类可直接访问,也就是说,基类中有protected成员,子类继承于基类,那么也可以访问基类的protected成员,要是基类是private成员,则对于子类也是隐藏的,不可访问。

private:私有的,只有类内的成员函数才可以访问。

2.  构造函数和析构函数

构造函数 是一种特殊的函数,用于创建和初始化对象。它在创建对象时被调用,用于设置对象的初始状态和属性。构造函数的名称通常与类的名称相同,且没有返回类型声明。构造函数可以有多个重载版本,每个版本允许接受不同类型和数量的参数。通过调用不同的构造函数,可以根据需要创建不同种类的对象。

**函数重载:同一个作用域下;函数名称相同;函数参数类型不同或者个数不同或者顺序不同。

析构函数 是另一种特殊的函数,用于在对象生命周期结束时执行清理工作。它的名称与类名相同,但在前面加上一个波浪号(~),并且没有参数和返回类型。析构函数的主要作用包括:

释放资源:释放对象在生命周期内分配的所有资源,如内存、文件句柄、网络连接等。

执行清理代码:执行必要的清理代码,确保对象在销毁前能够正确地清理其使用的资源。

防止资源泄露:帮助防止资源泄露和其他内存问题。

什么时候需要自己构造函数和析构函数?

1.当需要在对象创建时进行一些初始化操作时,可以定义构造函数来实现。比如,需要在对象创建时给成员变量赋初值或者打开一些资源。
2.当需要在对象销毁时进行一些清理操作时,可以定义析构函数来实现。比如,需要在对象销毁时释放一些资源或者关闭一些文件。
3.当需要控制对象的生命周期时,可以定义构造函数和析构函数来实现。比如,需要在对象创建时进行一些操作,在对象销毁时进行一些清理操作,这样可以确保对象的正确使用。

 3. 继承是什么?

语法:  class 子类 : 继承方式 父类     比如:class A :public B多继承语法:   
class 子类 : 继承方式   父类1,继承方式 父类1

继承过程中,父类中的私有成员也被子类继承,只是由编译器隐藏后访问不到。

继承同名成员处理方式:

        子类对象可以直接访问到子类中同名成员

        子类对象加作用域可以访问到父类同名成员

        当子类与父类拥有同名的成员函数,子类会隐藏父类中同名成员函数,加作用域可以访问到父类中同名函数。

4. 菱形继承是什么?

两个派生类继承同一个基类;又有某个类同时继承了两个派生类;这种继承称为菱形继承。

羊继承了动物数据;马继承了动物数据;草泥马继承了羊和马的数据,则动物数据被继承了两份。

采用虚继承的方法解决该问题。

5. 虚函数是什么?

虚函数只能是类的成员函数, 而不能将类外的普通函数声明为虚函数. 虚函数的作用是允许在派生类中对基类的虚函数重新定义 (函数覆盖), 只能用于类的继承层次结构中。

虚函数能有效减少空间开销. 当一个类带有虚函数时, 编译系统会为该类构造一个虚函数表 (一个指针数组), 用于存放每个虚函数的入口地址。

什么时候应该使用虚函数:

1.判断成员函数所在的类是不是基类, 非基类无需使用虚函数
2.成员函数在类被继承后有没有可能被更改的功能, 如果希望修改成员函数功能, 一般在基类中将其声明为虚函数;
3.我们会通过对象名还是基类指针访问成员函数, 如果通过基类指针过引用去访问, 则应当声明为虚函数

6. 静态函数和虚函数的区别?

多态分为两类:静态多态和动态多态

静态多态:函数重载和运算符重载属于静态多态、

虚函数因为用了虚函数表机制,调用的时候会增加一次内存开销。

7. 什么是多态?

多态是指不同继承关系的类对象,去调用同一函数,产生了不同的行为。
在继承中要想构成多态需要满足两个条件:1.必须通过基类的指针或者引用调用虚函数。2.被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。

8. 纯虚函数是什么?

纯虚函数不需要在父类中实现,必须在子类中实现
在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子类重写的内容,因此可以将虚函数改为纯虚函数。纯虚函数语法:virtual 返回值类型 函数名 (参数列表) = 0
当类中有了纯虚函数,这个类也称为抽象类
抽象类特点:无法实例化对象。子类必须重写抽象类中的纯虚函数,否则也属于抽象类。

9. 重载和覆盖有什么区别?

1.覆盖是子类和父类之间的关系,垂直关系;重载同一个类之间方法之间的关系,是水平关系。
2.覆盖只能由一个方法或者只能由一对方法产生关系;重写是多个方法之间的关系。
3.覆盖是根据对象类型(对象对应存储空间类型)来决定的;而重载关系是根据调用的实参表和形参表来选择方法体的。

10. 结构体和类的区别

1.默认访问权限:结构体(struct):在C++中,默认的成员访问权限是public,而在C#中,默认是private。类(class):在C++和C#中,默认的成员访问权限是private。2.继承:结构体(struct):在C++中,结构体可以继承其他结构体或类,并且默认使用public继承。在C#中,结构体不能继承。类(class):类可以继承其他类,并且可以选择public、protected或private继承。3.多态:结构体(struct):在C++中,结构体可以支持多态,但通常不推荐,因为结构体通常用于简单的数据聚合。在C#中,结构体不支持多态。类(class):类是多态的核心,可以定义虚函数(virtual functions)和抽象类(abstract classes)。4.语义含义:结构体(struct):通常用于简单的数据聚合,没有或很少的行为(方法)。类(class):用于表示具有状态(属性)和行为(方法)的对象。5.值类型和引用类型:结构体(struct):在C#中,结构体是值类型,而在C++中,结构体可以是值类型或引用类型,取决于其成员。类(class):在C#中,类是引用类型,在C++中,类总是引用类型。6.构造函数和析构函数:结构体(struct):在C#中,结构体可以有构造函数,但不能有析构函数。在C++中,结构体可以有构造函数和析构函数。类(class):类可以有构造函数和析构函数。7. 继承中的虚继承:结构体(struct):在C++中,结构体不支持虚继承。类(class):类支持虚继承,这有助于解决菱形继承问题。

相关文章:

【GL010】C/C++总结(二)

C部分 1. C中类成员的访问权限 无论成员被声明为 public、protected 还是 private,都是可以互相访问的,没有访问权限的限制。在类的外部 (定义类的代码之外),只能通过对象访问成员,并且通过对象只能访问 p…...

【合作原创】使用Termux搭建可以使用的生产力环境(五)

前言 在上一篇【合作原创】使用Termux搭建可以使用的生产力环境(四)-CSDN博客我们讲到了如何让proot-distro中的Debian声音驱动正常,将我们的系统备份后,通过VNC客户端连接到VNC服务器,这一篇我们来讲一下xfce桌面的美…...

初始数据结构

程序数据结构算法 数据结构研究计算机数据(元素)间关系 包括数据的逻辑结构和存储结构及其(数据间)操作 一、基本概念 1.1数据 数据即信息的载体,能被输入到计算机中并且能被它识别、存储和处理的符号总称 1.2数据…...

给我的小程序加了个丝滑的搜索功能,踩坑表情包长度问题

前言 最近在用自己的卡盒小程序的时候,发现卡片越来越多,有时候要找到某一张来看看笔记要找半天,于是自己做了一个搜索功能,先看效果: 怎么样,是不是还挺不错的,那么这篇文章就讲讲这样一个搜索…...

MATLAB中的合并分类数组

目录 创建分类数组 串联分类数组 创建具有不同类别的分类数组 串联具有不同类别的数组 分类数组的并集 此示例演示了如何合并两个分类数组。 创建分类数组 创建分类数组 A,其中包含教室 A 中的 25 个学生的首选午餐饮料。 rng(default) A randi(3,[25,1]); …...

ShardingSphere-JDBC

1. 什么是分库分表? 分库分表是一种数据库扩展技术,通过将数据拆分到多个数据库(分库)或多个表(分表)中来解决单一数据库或表带来的性能瓶颈。分库分表可以有效提升系统的可扩展性、性能和高并发处理能力&…...

企业如何选择远程控制软件来远程IT运维?

在当今企业的日常运作中,IT运维无疑是核心环节之一,它对于保持企业信息系统的稳定运行和数据安全至关重要。随着科技的快速进步,远程控制软件在IT运维中的应用变得越来越重要。今天,我们就来探讨一下远程控制软件如何助力企业IT运…...

Meta Llama 3.3 70B:性能卓越且成本效益的新选择

Meta Llama 3.3 70B:性能卓越且成本效益的新选择 引言 在人工智能领域,大型语言模型一直是研究和应用的热点。Meta公司最近发布了其最新的Llama系列模型——Llama 3.3 70B,这是一个具有70亿参数的生成式AI模型,它在性能上与4050…...

【银河麒麟高级服务器操作系统】修改容器中journal服务日志存储位置无效—分析及解决方案

了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:https://product.kylinos.cn 开发者专区:https://developer.kylinos.cn 文档中心:https://documentkylinos.cn 服务器环境以及配置 【机型】 整机类型/架构&am…...

go语言zero框架对接阿里云消息队列MQ的rabbit的配置与调用

在 Go 语言中对接阿里云消息队列(MQ)的 RabbitMQ 配置与调用,首先需要安装和配置相关的 Go 库,并了解如何通过 RabbitMQ 与阿里云消息队列进行交互。 ### 步骤一:安装 RabbitMQ Go 客户端库 阿里云的消息队列&#x…...

《Vue进阶教程》第四课:reactive()函数详解

往期内容: 《Vue零基础入门教程》合集(完结) 《Vue进阶教程》第一课:什么是组合式API 《Vue进阶教程》第二课:为什么提出组合式API 《Vue进阶教程》第三课:Vue响应式原理 通过前面的学习, 我们了解到r…...

【开源】A065—基于SpringBoot的库存管理系统的设计与实现

🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看项目链接获取⬇️,记得注明来意哦~🌹 赠送计算机毕业设计600个选题ex…...

memmove函数(带图详解)

c语言系列 文章目录 c语言系列一、memmove函数介绍1.1、函数基本功能1.2、函数参数2.3、函数返回值 二、memmove的使用2.1、拷贝字节不可大于目标空间2.2、同一空间拷贝 三、函数功能的模拟实现3.1、函数参数及其返回值的设定3.2、函数体实现 四、代码实现 一、memmove函数介绍…...

【Java数据结构】时间和空间复杂度

本章开始将进入数据结构的知识,时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间,。 时间复杂度 算法中执行的次数决定了时间复杂度。 在计算执行次数时,只需要计算大概的次数&#xff…...

八斗深度学习

八斗深度学习第二周笔记 一、深度学习步骤:1. 选定模型结构2. 模型参数随机初始化3. 构造模型损失函数4. 选择优化算法并设置超参数5. 数据准备与预处理6. 训练模型7. 模型评估8. 测试模型9. 应用模型 损失函数极小值、导向意义 超参数的影响迭代次数epoch批次量大小…...

安卓报错Switch Maven repository ‘maven‘....解决办法

例如:Switch Maven repository ‘maven(http://developer.huawei.com/repo/)’ to redirect to a secure protocol 在库链接上方添加配置代码:allowInsecureProtocol true...

Scala编程技巧:正则表达式与隐式转换

1. 引言 在Scala编程中,正则表达式和隐式转换是处理字符串匹配和类型转换的强大工具。本文将通过一个实用的示例——电话号码和身份证号码验证器,来展示如何使用这些工具。 2. 知识概括 2.1 正则表达式基础 正则表达式是用于字符串搜索和匹配的强大工…...

UnityShaderLab 实现黑白着色器效果

实现思路:取屏幕像素的RGB值,将三个通道的值相加,除以一个大于值使颜色值在0-1内,再乘上一个强度值调节黑白强度。 在URP中实现需要开启Opaque Texture ShaderGraph实现: ShaderLab实现: Shader "Bl…...

在Windows 10中使用SSH远程连接服务器(附花生壳操作方法)

SSH 在 linux 中是一种重要的系统组件,用户可以使用 SSH 来远程连接 linux 系统的计算机,或者传输文件。不过在 win10 以前,windows 并不原生支持 SSH,需要借助第三方工具来使用 SSH 功能。而实际上,微软在 2015 年就曾…...

在算网云平台云端在线部署stable diffusion (0基础小白超详细教程)

Stable Diffusion无疑是AIGC领域中的AI绘画利器,具有以下显著优势: 1、开源性质,支持本地部署 2、能够实现对图像生成过程的精确控制 虽然SD在使用上有很多的有点,但缺点也是不言而喻的,由于AI绘画的整个过程以及现…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中&#xff0…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...