【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数据结构】时间和空间复杂度
本章开始将进入数据结构的知识,时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间,。 时间复杂度 算法中执行的次数决定了时间复杂度。 在计算执行次数时,只需要计算大概的次数ÿ…...
八斗深度学习
八斗深度学习第二周笔记 一、深度学习步骤: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绘画的整个过程以及现…...

label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...

客户案例 | 短视频点播企业海外视频加速与成本优化:MediaPackage+Cloudfront 技术重构实践
01技术背景与业务挑战 某短视频点播企业深耕国内用户市场,但其后台应用系统部署于东南亚印尼 IDC 机房。 随着业务规模扩大,传统架构已较难满足当前企业发展的需求,企业面临着三重挑战: ① 业务:国内用户访问海外服…...
跨平台商品数据接口的标准化与规范化发展路径:淘宝京东拼多多的最新实践
在电商行业蓬勃发展的当下,多平台运营已成为众多商家的必然选择。然而,不同电商平台在商品数据接口方面存在差异,导致商家在跨平台运营时面临诸多挑战,如数据对接困难、运营效率低下、用户体验不一致等。跨平台商品数据接口的标准…...
手动给中文分词和 直接用神经网络RNN做有什么区别
手动分词和基于神经网络(如 RNN)的自动分词在原理、实现方式和效果上有显著差异,以下是核心对比: 1. 实现原理对比 对比维度手动分词(规则 / 词典驱动)神经网络 RNN 分词(数据驱动)…...
Docker、Wsl 打包迁移环境
电脑需要开启wsl2 可以使用wsl -v 查看当前的版本 wsl -v WSL 版本: 2.2.4.0 内核版本: 5.15.153.1-2 WSLg 版本: 1.0.61 MSRDC 版本: 1.2.5326 Direct3D 版本: 1.611.1-81528511 DXCore 版本: 10.0.2609…...
大模型真的像人一样“思考”和“理解”吗?
Yann LeCun 新研究的核心探讨:大语言模型(LLM)的“理解”和“思考”方式与人类认知的根本差异。 核心问题:大模型真的像人一样“思考”和“理解”吗? 人类的思考方式: 你的大脑是个超级整理师。面对海量信…...

C# WPF 左右布局实现学习笔记(1)
开发流程视频: https://www.youtube.com/watch?vCkHyDYeImjY&ab_channelC%23DesignPro Git源码: GitHub - CSharpDesignPro/Page-Navigation-using-MVVM: WPF - Page Navigation using MVVM 1. 新建工程 新建WPF应用(.NET Framework) 2.…...