C++小问题

 怎么分辨const修饰的是谁 是限定谁不能被改变的?

        在C++中,const关键字的用途和位置非常关键,它决定了谁不能被修改const可以修饰变量、指针、引用等不同的对象,并且具体的作用取决于const的修饰位置。理解const的规则能够帮助我们明确代码中哪些部分不能被改变

  • const修饰普通类型变量,修饰的变量的值不能被改变。
  • const int* ptr  ptr指向的值不能被改变
  • int* const ptr ptr指向的地址不能别改变 指向地址的值可以被改变 引用的底层原理
  • const int* const ptr ptr指向的地址和地址存储的值都不能被改变        
  • const int& ptr 常量引用 本来就不能改变引用指向 const修饰后引用的值也不能被改变

const的实际作用取决于它在声明中的位置。

两种在vector中删除元素的方法

1. std::remove + erase

nodes.erase(remove(nodes.begin(), nodes.end(), node), nodes.end());

        这个方法是先通过remove先把k个与node匹配的元素移动到vector的最后 然后实现O(k)时间复杂度的删除操作。适合当数组中存在多个与node相匹配的元素时候使用。

2. std::find + erase

auto it = find(nodes.begin(), nodes.end(), node);
if (it != nodes.end()) {
    nodes.erase(it);
}

        这个方法是通过find找到一个和node匹配的元素的迭代器,然后直接通过迭代器删除这个元素,总体是O(n)的时间复杂度,比较适合当数组中的元素是唯一的时候使用。

Map和unorderedMap的区别

C++类的大小由什么决定? 

  1. 成员变量的大小:普通成员变量,数组成员变量
  2. 虚函数表和虚函数:如果类中定义了一个虚函数那么他会有一个虚函数表,类中会存储一个指向虚函数表的指针,虚函数表中存储指向虚函数的指针
  3. 继承关系:如果子类继承了一个基类,那么子类会继承父类的成员变量和虚函数,如果父类有虚函数,子类会继承父类的虚函数指针。
  4. 对齐:类中的成员变量会根据其类型要求进行内存对齐,为了满足对齐要求,编译器会在成员之间填充字节来满足对齐要求。

为什么C语言不能重载,C++可以

        C语言缺少C++中的名称修饰机制,C语言的编译器无法分辨参数列表不同的同名函数,如果定义多个参数列表不同的同名函数,在调用函数的时候C语言的编译器无法分辨要调用的函数是哪个,会导致二义性。

函数重写和函数隐藏

        函数重写:子类重写父类的虚函数,必须是虚函数,只有参数列表不同。创建一个父类指针指向子类对象就可以通过指针指向的对象来调用子类重写的虚函数。

        函数隐藏:如果参数列表相同是函数重写,如果函数同名但是参数列表不同就是函数隐藏

子类指针可以调用父类函数吗?

        子类指针可以调用父类函数,前提是子类没有隐藏该函数。如果子类没有隐藏父类的函数(即,子类中没有定义同名但参数不同的函数),那么子类指针可以调用父类中的虚函数(如果该函数在父类中是虚拟的)。

        如果要调用的父类虚函数已经被子类重写了,子类指针调用这个虚函数是会默认调用子类中重写后的函数,如果想调用父类的重写之前的函数可以通过子类中的函数来使用作用域解析符来间接调用父类被重写的函数。

让类只能在栈或者堆上创建对象

只能在栈上创建对象

 // 禁止堆上分配:删除 operator new
    void* operator new(std::size_t size) = delete;
// 禁止堆上删除:删除 operator delete
    void operator delete(void* pointer) = delete;

        但事实上这种方法并不能实现限制类只能在栈上创建对象的目的,因为还可以通过  ::  全局作用域解析符来使用全局的new

只能在堆上创建对象

        把析构函数设置为私有,由于创建在栈上的对象是由编译器自动分配和释放内存空间的,当在栈上创建对象时编译器会检查类的析构函数是否可用,如果不可用则编译器不会在栈上为对象分配空间。

声明和定义的对比

如何阻止类创建对象

  1. 将构造函数私有化或者删除构造函数
  2. 将类设置为抽象类
  3. 禁止拷贝构造和赋值操作符

为什么抽象类不能实例化

  • 抽象类不能实例化的原因是它包含至少一个纯虚函数,这使得它成为一个不完整的类。
  • 抽象类的设计目的是提供接口或基础实现,而具体的行为和实现应由派生类提供。
  • 抽象类可以被派生类继承,并在派生类中实现纯虚函数,从而允许派生类的实例化。

C++的成员函数能调用this指针吗

        成员函数可以使用 this 指针。this 指针是一个指向调用该成员函数的对象的指针。

什么是野指针、悬空指针、空指针

空指针:在C语言中用NULL来表示空指针((void*)0)C++中的空指针是nullptr 代表0

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker中配置Mysql主从备份

Mysql配置主从备份 一、Docker中实现跨服务器主从备份二、配置步骤1.配置主库2.配置从库3.遇到问题3.其它使用到的命令 一、Docker中实现跨服务器主从备份 在 Docker 中配置 MySQL 主从备份主要通过 MySQL 主从复制实现 二、配置步骤 1.配置主库 # 进入mysql主库容器 docke…

下载maven 3.6.3并校验文件做md5或SHA512校验

一、下载Apache Maven 3.6.3 Apache Maven 3.6.3 官方下载链接: 二进制压缩包(推荐): ZIP格式: https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.zipTAR.GZ格式: https://archive.apache.org/dist/…

C++趣味编程:基于树莓派Pico的模拟沙漏-倾斜开关与LED的互动实现

沙漏,作为一种古老的计时工具,利用重力让沙子通过狭小通道,形成了计时效果。在现代,我们可以通过电子元件模拟沙漏的工作原理。本项目利用树莓派Pico、倾斜开关和LED,实现了一个电子沙漏。以下是项目的详细技术解析与C++代码实现。 一、项目概述 1. 项目目标 通过倾斜开关…

pycharm链接neo4j(导入文件)

1.新建csv文件 2.写入文件 3.运行代码 import csv from py2neo import Graph, Node, Relationship# 连接到Neo4j数据库,使用Bolt协议 graph Graph("bolt://localhost:7687", auth("neo4j", "password"))# 读取CSV文件 with open(…

【C++】多线程

目录 一 概念 1 多线程 2 多进程与多线程 3 多线程理解 二 创建线程 1 thread 2 join() 和 detach() 3 this_thread 三 std::mutex 1 lock 和 unlock 2 lock_guard 3 unique_lock 四 condition_variable 五 std::atomic 一 概念 1 多线程 在C11之前&#xff0…

Kafka 图形化工具 Eagle安装

Kafka 图形化工具 Eagle 3.0.1版本安装 1、安装JDK jdk安装 2、安装kafka 如未安装kafka,需要先安装完kafka 3、下载kafka-eagle 官网下载地址 wget https://github.com/smartloli/kafka-eagle-bin/archive/v3.0.1.tar.gz #移动到安装目录 mv v3.0.1.tar.gz…

vue实现echarts饼图自动轮播

echarts官网:Examples - Apache ECharts echartsFn.ts 把echarts函数封装成一个文件 import * as echarts from "echarts";const seriesData [{"value": 12,"name": "过流报警"},{"value": 102,"name&qu…

CSS动画案例6

目录 一、介绍二、静态页面的布局1.HTML部分2.CSS 三、动画交互四、结束语 一、介绍 本节内容我们来仿照一个网站(戳我进网站)的进入页面时的doing动画部分,首先是大标题从最小变为最大,然后是副标题从下向上走,最后是…

Proteus8.17下载安装教程

Proteus是一款嵌入式系统仿真开发软件,实现了从原理图设计、单片机编程、系统仿真到PCB设计,真正实现了从概念到产品的完整设计,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,能够帮助用…

工作-k8s问题处理篇

前言:公司这边为集团,所以项目较多,我目前总负责的项目架构有十六个,其中还有海外项目,不过底下也有一定的细分,同事解决不了的问题会升级到我这,只k8s容器平台常用的就有三种,一种是…

spring boot3.3.5 logback-spring.xml 配置

新建 resources/logback-spring.xml 控制台输出颜色有点花 可以自己更改 <?xml version"1.0" encoding"UTF-8"?> <!--关闭文件扫描 scanfalse --> <configuration debug"false" scan"false"><springProperty …

MySQL--SQL优化

目录 1 插入数据 1.1 insert优化 1.1.1 批量插入 1.1.2 手动提交事务 1.1.3 主键顺序插入 1.2 大批量插入数据 2 主键优化 2.1 数据组织方式 2.2 页分裂 2.3 页合并 2.4 主键设计原则 3 order by优化 4 group by优化 1. 使用索引 2. 减少数据集大小 3. 使用合适的聚…

【计算机网络】实验2:总线型以太网的特性

实验 2&#xff1a;总线型以太网的特性 一、 实验目的 加深对MAC地址&#xff0c;IP地址&#xff0c;ARP协议的理解。 了解总线型以太网的特性&#xff08;广播&#xff0c;竞争总线&#xff0c;冲突&#xff09;。 二、 实验环境 • Cisco Packet Tracer 模拟器 三、 实…

Java函数式编程【二】【Stream的装饰】【中间操作】【map映射器】【摊平映射器flatMap】

一、Java的Stream流式编程中的中间操作 Java的Stream流式编程中&#xff0c;中间操作是对数据流进行处理的一种方式&#xff0c;这些操作通常返回流对象本身&#xff0c;以便可以链接更多的操作。以下是一些常见的中间操作&#xff1a; filter(Predicate predicate) - 用于通过…

使用pymupdf提取PDF文档中的文字和其颜色

最近我在捣鼓一个PDF文件&#xff0c;想把它里面的文字和文字颜色给提取出来。后来发现有个叫pymupdf的库能搞定这事儿。操作起来挺简单的&#xff0c;pymupdf的示例文档里就有现成的代码可以参考。 how-to-extract-text-with-color 我本地的测试代码如下&#xff1a; impor…

MYSQL 多表练习

Sutdent表的定义 ---------------------------------------------------------------------------------------------------- | 字段名 | Id | Name | Sex | Birth | Department | Address | -------------------…

2024年12月HarmonyOS应用开发者基础认证全新题库

注意事项&#xff1a;切记在考试之外的设备上打开题库进行搜索&#xff0c;防止切屏三次考试自动结束&#xff0c;题目是乱序&#xff0c;每次考试&#xff0c;选项的顺序都不同 更新时间&#xff1a;2024年12月3日 这是基础认证题库&#xff0c;不是高级认证题库注意看清楚标…

一文解析Kettle开源ETL工具!

ETL&#xff08;Extract, Transform, Load&#xff09;工具是用于数据抽取、转换和加载的软件工具&#xff0c;用于支持数据仓库和数据集成过程。Kettle作为传统的ETL工具备受用户推崇。本文就来详细说下Kettle。 一、Kettle是什么&#xff1f; Kettle 是一款开源的 ETL&#x…

【模型剪枝】YOLOv8 模型剪枝实战 | 稀疏化-剪枝-微调

文章目录 0. 前言1. 模型剪枝概念2. 模型剪枝实操2.1 稀疏化训练2.2 模型剪枝2.3 模型微调总结0. 前言 无奈之下,我还是写了【模型剪枝】教程🤦‍♂️。回想当年,在写《YOLOv5/v7进阶实战专栏》 时,我经历了许多挫折,才最终完成了【模型剪枝】和【模型蒸馏】的内容。当时…

【算法刷题指南】优先级队列

&#x1f308;个人主页&#xff1a; 南桥几晴秋 &#x1f308;C专栏&#xff1a; 南桥谈C &#x1f308;C语言专栏&#xff1a; C语言学习系列 &#x1f308;Linux学习专栏&#xff1a; 南桥谈Linux &#x1f308;数据结构学习专栏&#xff1a; 数据结构杂谈 &#x1f308;数据…