C++记录总结及面试常见问题

news2025/2/28 0:13:35

C++记录总结及面试常见问题

  • 指针和函数
  • 内存分区模型
  • 访问权限
  • struct & class创建类
  • 构造函数
  • 静态成员
  • this指针
  • const 修饰成员函数
  • 友元friend
  • 重载运算符和重载函数
  • 继承
  • 读文件ifstream/fstream
  • vector中resize和reserve的区别
  • 智能指针
  • 左值与右值
  • struct、class区别
  • 引用

指针和函数

函数值传递会拷贝变量副本,增加内存空间,函数内部改变变量值不影响主函数(函数外部)的变量值。
函数指针传递不会拷贝变量副本,并且指针变量占用首字节固定,不会增加占用内存空间,改变函数内部参数值在函数外部也会改变。若本意不想修改函数内部的数据或者防止误操作,可以传递一个const 指针。
func(int a, int b)值传递,形参不会修饰实参
func(int *a, int *b)地址传递,形参会修饰实参
func(int& a, int& b)引用传递,形参会修饰实参,若不想修改,可以在形参前加const

内存分区模型

程序运行前:
代码区:存放函数体的二进制代码,由操作系统进行管理的。共享+只读特点。
全局区:存放全局变量和静态变量及常量
程序运行后:
栈区:由编译器自动分配释放,存放函数的参数值,局部变量等。不能返回局部变量地址,第一次保留第二次会释放乱码。
堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收。利用new关键字可以将数据开辟内存到堆区,手动开辟,手动释放,关键字为delete,若为数组加[] 即delete[]
不同区域存放的数据,赋予不同的生命周期,具有更大的灵活编程。

访问权限

public 成员 类内可以访问,类外可以访问
protected 类内可以访问,类外不可以访问, 子类可以访问
private 类内可以访问,类外不可以访问,子类不可以访问
成员属性/变量,设为私有,可以自己控制读写权限,可以检测数据有效性。可以通过公共成员函数去设置读或者写操作。

struct & class创建类

struct 默认公共权限
class 默认私有权限

构造函数

参数分:有参构造、无参构造(默认构造)
类型分:普通构造、拷贝构造 将传入的属性拷贝到自己身上用法:(类名(const 类名 &属性)),注意,不能用拷贝构造,初始化为匿名对象,会重定义。
调用默认构造不加(),若加()编译器会认为是一个函数的声明。
调用方式:1.括号法,也是匿名对象,当前行执行结束后会立即回收匿名对象(调用析构)2、显示法,用括号法在赋值给左参方式,3、隐式调用有参构造,直接=赋值到左参。

静态成员

包括静态成员变量和静态成员函数
静态成员变量:
1、所有对象共享一份数据
2、在编译阶段分配内存
3、类内声明,类外初始化
有两种访问方式:通过对象访问,通过类名访问
静态成员函数:
1、所有对象共享一个函数
2、只能访问静态成员变量

this指针

this指针指向被调用的成员函数所属的对象。
隐含每一个非静态成员函数内的一种指针。
不需要定义,直接使用即可。
用途:
当形参和成员变量同名时,可以用this指针来区分。类似python中的self
在类的非静态成员函数中返回对象本身,用return *this

const 修饰成员函数

称为常函数,常函数内不可以修改成员属性。(this指针的本质是指针常量,指针的指向不可以修改)
若想修改,可以在成员属性声明加关键字mutable
若声明对象前加const,则为常对象。
常对象只能调用常函数。

友元friend

目的是让一个函数或者类访问另一个类中私有成员。
1、全局函数做友元
2、类做友元
3、成员函数做友元

重载运算符和重载函数

C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。
对内置数据类型的表达式运算符是不可以改变的

继承

语法:class子类(派生类):继承方式 父类(基类)
好处:减少重复代码
在这里插入图片描述

在这里插入图片描述

读文件ifstream/fstream

前三种是按行读取,第四种是单个字符读取效率最低,前两种是c语言的字符数组代表一个字符串,第三种是C++string代表字符串。
在这里插入图片描述

vector中resize和reserve的区别

1.capacity在容器初始化时赋值,指容器能够容纳的最大元素个数,此时容器中还没有创建对象,不能通过下标等访问。
2.size指容器中实际的元素个数,可以通过下标访问。
resize既分配内存空间也创建对象。即修改了capacity大小也修改size大小。
reserve只修改capacity的大小,不能修改size大小。

智能指针

shared_ptr、unique_ptr、weak_ptr
shared_ptr:引用计数是存放在堆上,允许多个指针指向同一个对象
unique_ptr:独占所指向的对象,不能将一个unique_ptr指向的对象赋值给另一个unique_ptr。没有引用计数,性能好于shared_ptr
wear_ptr:是一个不控制所指向对象生存期的智能指针,指向由shared_ptr管理的对象。

左值与右值

可以取地址的,有名字的,非临时的就是左值。
不能取地址没有名字临时的,通常生命周期在某个表达式之内的就是右值。

struct、class区别

struct的成员默认是公有的,class默认是私有的
其他功能差不多。

引用

对象的别名,即对象本身,修改形参会改变实参本身。
不能使一个引用重新指向另一个对象
尽可能使用引用,不得已使用指针

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

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

相关文章

Zabbix6.0升级到Zabbix6.4

1:现在的版本是6.0.3 2:停止Zabbix Server进程。 systemctl stop zabbix-server 若升级Zabbix proxy版本,需也停止Zabbix proxy服务 。 systemctl stop zabbix-proxy 3:我用的是MariaDB数据库名称是zabbix。 4: 查看…

windows11安装pytorch2.0

换了新电脑,好久没用windows了,配置一下环境,顺便记录一下方便帮助AI小白不会浪费时间在装环境上(一星期不夸张hah) 打开命令行,然后输入 nvidia-smi,检查自己的显卡驱动 也可以通过图形界面查…

Python轻量级Web框架Flask(6)——Flask中的单表操作(增删改“查”)

0、前言:Python轻量级Web框架Flask(5)中生成的新模板就是包含数据库操作的Flask模板。 在pycharm中用flask写表结构时需用用到数据类型的定义如下: 下面总结一些常用到的数据类型: 1、Python轻量级Web框架Flask&…

传智健康项目总结

耗时一个半月终于把传智健康项目跟着做完了,下面是对项目的一点心得体会。 项目知识点总结 Maven中parent父工程聚合 聚合模块(父工程)作用:父工程是一个pom工程,通常只是用来帮助其子模块构建的工具,本身并没有实质的内容。具体…

【Pytorch】搭建网络模型的实战

【Pytorch】搭建网络模型的实战CIFAR10 model structure搭建网络使用Sequential进行搭建网络模型使用tensorboard查看网络结构对CIFAR10数据集进行分类,根据图片内容识别这是哪一类 CIFAR10 model structure 输入input:3通道的32 x 32 图片卷积操作的通道数不变 那…

C#,码海拾贝(16)——求“矩阵秩”的全选主元“高斯消去法(Gauss Elimination)”C#源代码,《C#数值计算算法编程》源代码升级改进版

1 矩阵的秩 Rank of Matrix 矩阵的秩是线性代数中的一个概念。在线性代数中,一个矩阵A的列秩是A的线性独立的纵列的极大数,通常表示为r(A),rk(A)或rank A。 在线性代数中,一个矩阵A的列秩是A的线性独立的纵列的极大数目。类似地&…

全面解析反欺诈(羊毛盾)API,助你识别各类欺诈风险

前言 反欺诈(羊毛盾)反机器欺诈 API,是一种基于大数据分析和模型产品的技术,通过输入手机号、手机 IP 地址进行检测,帮助客户识别大量存在恶意的账号。 反欺诈(羊毛盾)API 的作用 反欺诈&…

Spring自定义参数解析器~

1. 什么是参数解析器 RequstBody、RequstParam 这些注解是不是很熟悉? 我们在开发 Controller 接口时经常会用到此类参数注解,那这些注解的作用是什么?我们真的了解吗? 简单来说,这些注解就是帮我们将前端传递的参数…

基于Sikuli GUI图像识别框架的PC客户端自动化测试实践

目录:导读 引言 一、GUI图像识别框架元祖:Sikuli 二、Sikuli运行原理 三、Sikuli安装 四、Sikuli IDE主界面基本使用 五、Sikuli 脚本语法 六、Sikuli 应用示例 七、Sikuli 优势及局限 1.优势 2.局限 Sikuli 使用小结 引言 Sikuli是一种基于…

【Hello Network】网络基础1

作者:小萌新 专栏:网络 作者简介:大二学生 希望能和大家一起进步 本篇博客简介:简单介绍网络的基础概念 网络基础1网络基础网络的起源网络在哪里认识协议网络协议协议分层OSI七层模型TCP/IP协议网络传输流程局域网的两台主机通信两…

跟姥爷深度学习3 神经网络的调试实操

一、前言 前面我们做了一次天气预测的模型,训练的结果都还好,网络好歹是“拟合”了,但预测数据不合预期让我一直耿耿于怀。所以我又花了很长时间来研究为什么,我的理论依据明明没有问题(今日*均温度与*一周*均温度具有…

全球6G技术大会总结报告

全球6G技术大会 论坛B:天地融合智能组网技术 论坛D:2030技术发展趋势 论坛E:6G无线空口传输技术 论坛F:6G通感算架构及关键技术 论坛H:6G网络架构及关键技术 论坛B:天地融合智能组网技术 论坛B中包含…

【Java 并发编程】一文了解线程间有哪些通信方式?

一文了解线程间有哪些通信方式?1. synchronized 内置锁2. volatile 关键字3. 等待/通知机制3.1 等待wait()wait(long)wait(long, int)等待方需遵循如下原则3.2 通知notify()notifyAll()通知方需遵循如下原则notify() 和 notifyAll() 应该用谁?4. 管道输入…

第18章_JDK8-17新特性(下)

第18章_JDK8-17新特性(下) 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 6. 新语法结构 新的语法结构,为我们勾勒出了 Java 语法进化的一个趋势&#xff0c…

STM32 库函数 GPIO_SetBits、GPIO_ResetBits、GPIO_WriteBit、GPIO_Write 区别

问题:当我使用STM32库函数对 I/O 口进行赋值时,在头文件中发现有四个相关的函数可以做这个操作,那么它们有什么区别呢? 一、GPIO_SetBits //eg: GPIO_SetBits(GPIOA, GPIO_Pin_1 | GPIO_Pin_2);解释:置位(置1)选择的数…

十、市场活动-分页查询

功能需求 ①、当市场活动主页面加载完成之后,显示所有数据的第一页; ②、用户在市场活动主页面填写查询条件,点击"查询"按钮,显示所有符合条件的数据的第一页,保持每页显示条数不变 ③、实现翻页功能. *在市场活动主页面,显示市场活动列表和记录的总条…

Spring MVC(Boot) Servlet 3.0异步处理,DeferredResult和Callable(续篇)

目录背景意外发现结论背景 上篇Spring MVC(Boot) Servlet 3.0异步处理,DeferredResult和Callable,我把WebMvcConfig 代码加入项目后,会报冲突的问题。如下所示。 requestMappingHandlerMapping: defined by method ‘requestMappingHandlerM…

The 1st Universal Cup Stage 12: ̄Ookayama, April 15-16, 2023 题解

A XOR Tree Path 给一颗树&#xff0c;树上点有黑白两色&#xff0c;每次可以选一个叶子节点&#xff0c;翻转其到根路径上所有点的颜色&#xff0c;问最大黑色点数。 树dp #include<bits/stdc.h> using namespace std; #define MAXN (10000010) #define ll long long…

计及氢能的综合能源优化调度研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

使用国密SSL证书,实现SSL/TLS传输层国密改造

密码是保障网络空间安全可信的核心技术和基础支撑&#xff0c;通过自主可控的国产密码技术保护重要数据的安全&#xff0c;是有效提升我国信息安全保障水平的重要举措。因此&#xff0c;我国高度重视商用密码算法的应用并出台相关政策法规&#xff0c;大力推动国产商用密码算法…