C++面试准备

变量作用:给一段指定的内存空间起名,方便操作这段内存。

常量:用于记录程序中不可更改的数据。

#include <iostream>
using namespace std;#define DAY 7
int main() {cout << "一周有" << DAY << "天" << endl;const int hour = 24;cout << "一天有" << hour << "小时" << endl;return 0;
}

在给变量或常量起名时,不用使用关键字。

整型有几种类型,区别是占用内存空间不同

#include <iostream>
using namespace std;int main() {cout << sizeof(short) << endl;cout << sizeof(int) << endl;cout << sizeof(long) << endl;cout << sizeof(long long) << endl;return 0;
}

在这里插入图片描述
在这里插入图片描述
科学计数法以10为底

float f2 = 3e2;
float f3 = 3e-2;
cout << f2 << endl;
cout << f3 << endl;

C和C++中字符型变量只占用1个字节。
字符型变量并不是把字符本身放到内存中存储,而是将对应的ASCII编码放入到存储单元

字符串型

#include <iostream>
using namespace std;int main() {char str[] = "1111";cout << str << endl;string str2 = "2222"; cout << str2 << endl;return 0;
}

数组特点

放在一块连续的内存空间中,数组中每个元素都是相同数据类型。

如果在初始化时候,没有全部填写完,会用0来填补剩余数据。

一维数组数组名

在这里插入图片描述

冒泡排序

  1. 比较相邻的元素,如果第一个比第二个大,就交换他们。
  2. 对每一对相邻元素做相同工作,执行完毕后,找到第一个最大值。
  3. 重复以上步骤,每次比较次数-1,直到不需要比较。

值传递

所谓值传递,就是函数调用时实参将数值传入给形参。

值传递时,如果形参发生改变,并不会影响实参。

函数的声明

作用:告诉编译器函数名称以及如何调用函数。函数的实际主体可以单独定义。

声明可以有多次,但是定义只能有一次。

空指针

指针变量指向内存中编号为0的空间。
用途:初始化指针变量

空指针指向的内存是不可以访问的。

内存编号0~255是系统占用的,用户不允许访问。

利用指针作函数参数,可以修改实参的值。

值传递不会改变实参,地址传递会改变实参。

结构体

结构体属于用户自定义的数据类型,允许用户存储不同的数据类型。

C++中创建结构体变量时,关键字struct可以省略。

结构体指针

#include <iostream>
using namespace std;struct Student {string  name;int age;int score;
};
int main() {Student student = { "小苹苹",18,100 };Student* p = &student;cout << p->name << endl;return 0;
}

引用的本质,就是一个指针常量。
所以引用一旦初始化后,就不可以发生改变。

常量引用

常量引用主要用来修饰形参,防止误操作。
在函数形参列表中,可以加const修饰形参,防止形参改变实参。

void showValue(const int &value){//value++;cout << value << endl;
}

函数默认参数

在C++中,函数的形参列表中的形参可以有默认值

函数重载

作用:函数名可以相同,提高复用性。

函数重载满足条件:

  • 同一个作用域下
  • 函数名称相同
  • 函数参数类型不同或者个数不同或者顺序不同

C++面向对象的三大特征:封装、继承、多态

实例化:通过一个类,创建一个具体对象的过程。

类中的属性和行为,统一称为成员。

struct和class区别

唯一的区别就在于默认的访问权限不同。
区别:

  • struct:默认权限为公共
  • class:默认权限为私有

将成员属性设置为私有

可以自己控制读写权限

构造函数

  1. 没有返回值也不写void
  2. 函数名称与类名相同
  3. 构造函数可以有参数,可以发生重载
  4. 会自动调用构造,而且只会调用一次
类名(){}

析构函数

~类名(){}

析构函数不可以有参数,因此不可以发生重载

如果利用编译器提供的拷贝构造函数,会做浅拷贝操作。

浅拷贝带来的问题就是堆区的内存重复释放。

~Person(){if(m_Height != NULL){delete m_Height;m_Height = NULL;}
}

浅拷贝的问题要利用深拷贝进行解决。

Person(const Person& p){Person.m_Height = new int(*p.m_Height);
}
  • 浅拷贝:简单的赋值拷贝操作
  • 深拷贝:在堆区重新申请空间,进行拷贝操作

如果有属性在堆区开辟,一定要自己提供拷贝构造函数,防止浅拷贝带来的问题。

环形链表

给一个链表的头节点head,判断链表中是否有环。

如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。

哈希表
最容易想到的方法是遍历所有节点,每次遍历到一个节点时,判断该节点此前是否被访问过。

可以使用哈希表来存储所有已经访问过的节点。
每次我们到达一个节点,如果该节点已经存在于哈希表中,则说明该链表是环形链表,否则就将该节点加入哈希表中,重复这个过程。

区分黑球与白球

桌子上有n个球,每个球的颜色不是黑色,就是白色。

给一个长度为n,下标从0开始的二进制字符串,其中1就是黑球,0就是白球。

在每一步中,可以选择两个相邻的球并交换他们。

将所有黑球移到右侧,白球移到左侧,所需要的最小步数。

贪心
交换完后的最终状态一定是形如00001111,那么便利字符串的时候,每碰到一个0就贪心的将其往左交换,直到它到达最终的位置。

字符串中的额外字符

给一个下标从0开始的字符串s和一个单词字典序dictinary。
动态规划
题目要求将字符串s分割成若干个互补重叠的子串,并且子串必须在dictinary中出现。
一些额外的字符可能不属于任何子串。
题目要求最小化这些额外字符的数量。

设n是s的长度,现在有两种基本的分割方案:

  1. 把s的最后一个字符s[n-1]当做是额外字符,那么问题转换为长度为n-1的子问题。
  2. 找到一个j使得s的后缀s[j…n-1]构成的子串在dictionary,那么问题转换为j-1的子问题。

因此,定义d[i]为s前缀[0,…,i-1]的子问题,那么d[i]取下面情况的最小值。

  1. 把s[i-1]当做是额外字符,d[i] = d[i-1]+1。
  2. 遍历所有的j,如果s[j…i-1]在dictinary,那么d[i] = mid d[j]

C++编译器至少给一个类添加4个函数

  1. 默认构造函数(无参,函数体为空)
  2. 默认析构函数(无参,函数体为空)
  3. 默认拷贝构造函数,对属性进行值拷贝
  4. 赋值运算符operator=,对属性进行值拷贝

如果类中有属性指向堆区,做赋值操作时也会出现深浅拷贝问题。

函数调用运算符重载

  • 函数调用运算符()也可以重载
  • 由于重载后使用的方式非常像函数的调用,因此称为仿函数
  • 仿函数没有固定写法,非常灵活

匿名对象

类名()
当前行执行完,立即被释放。

子类继承父类后,当创建子类对象时,也会调用父类的构造函数

创建一个子类对象时,先调用父类构造,再调用子类构造,析构顺序相反。

继承同名成员处理

  • 访问子类同名成员:直接访问即可
  • 访问父类同名成员:需要加作用域

C++允许一个类继承多个类

菱形继承

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

在这里插入图片描述

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

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

相关文章

路由器怎么设置局域网?

局域网&#xff08;Local Area Network&#xff0c;LAN&#xff09;是指在一个相对较小的地理范围内&#xff0c;如家庭、办公室或学校等&#xff0c;通过路由器等设备连接起来的计算机网络。设置局域网可以方便地实现内部资源共享和信息交流。本文将介绍如何设置局域网以及一个…

maven 显式依赖包包含隐式依赖包,引起依赖包冲突

问题&#xff1a;FlinkCDC 3.0.1 代码 maven依赖包冲突 什么是依赖冲突 依赖冲突是指项目依赖的某一个jar包&#xff0c;有多个不同的版本&#xff0c;因而造成类包版本冲突 依赖冲突的原因 依赖冲突很经常是类包之间的间接依赖引起的。每个显式声明的类包都会依赖于一些其它…

Java I/O操作

引言 在Java编程中&#xff0c;输入和输出&#xff08;I/O&#xff09;操作是必不可少的部分。Java I/O通过一系列流&#xff08;Stream&#xff09;类和方法&#xff0c;支持文件操作、控制台输入输出、网络I/O等多种I/O操作。本文将详细介绍Java I/O的基础概念、文件操作、字…

FPGA专项课程即将开课,颁发AMD官方证书

社区成立以来&#xff0c;一直致力于为广大工程师提供优质的技术培训和资源&#xff0c;得到了众多用户的喜爱与支持。为了满足用户需求&#xff0c;我们特别推出了“基于Vitis HLS的高层次综合及图像处理开发”课程。 本次课程旨在帮助企业工程师掌握前沿的FPGA技术&#xff…

携程任我行礼品卡怎么用?

前两天我用积分兑了张携程卡&#xff0c;但是最近有没有假期&#xff0c;这张携程卡又不知道咋用 最后朋友告诉我可以在收卡云上转让&#xff0c; 去收卡云看了一眼&#xff0c;携程卡现在99.1折&#xff0c;果断出了&#xff0c;到账速度好快啊

Java多线程编程与并发处理

引言 在现代编程中&#xff0c;多线程和并发处理是提高程序运行效率和资源利用率的重要方法。Java提供了丰富的多线程编程支持&#xff0c;包括线程的创建与生命周期管理、线程同步与锁机制、并发库和高级并发工具等。本文将详细介绍这些内容&#xff0c;并通过表格进行总结和…

IntelliJ IDEA 用maven创建web项目

前言 已经安装并配置好Tomcat。具体步骤&#xff1a;Tomcat安装及环境变量配置(一看就会)-CSDN博客​编辑https://blog.csdn.net/longyongyyds/article/details/135825647 具体步骤 1.新建一个maven项目 2&#xff0c;配置好tomcat服务器 3.运行测试一下 maven教程&#xf…

使用PHP对接企业微信审批接口的流程和基本接口(一)

在现代企业中&#xff0c;审批流程是非常重要的一环&#xff0c;它涉及到企业内部各种业务流程的规范和高效运转。而随着企业微信的流行&#xff0c;许多企业希望将审批流程整合到企业微信中&#xff0c;以实现更便捷的审批操作。本文将介绍如何使用PHP对接企业微信审批接口&am…

鸿蒙轻内核A核源码分析系列四(3) 虚拟内存

4.2 函数LOS_RegionAlloc 函数LOS_RegionAlloc用于从地址空间中申请空闲的虚拟地址区间。参数较多&#xff0c;LosVmSpace *vmSpace指定虚拟地址空间&#xff0c;VADDR_T vaddr指定虚拟地址&#xff0c;当为空时&#xff0c;从映射区申请虚拟地址&#xff1b;当不为空时&#…

WebSocket 详解--spring boot简单使用案例

一、什么是WebSocket WebSocket 是一种网络通信协议&#xff0c;专为在单个 TCP 连接上进行全双工通信而设计。WebSocket 允许客户端和服务器之间的消息能够实时双向传输。这与传统的 HTTP 请求-响应模式有很大的不同。 二、WebSocket 的关键特性 双向通信&#xff1a;WebSocke…

【StableDiffusion】Prompts 提示词语法;高阶用法;写作顺序是什么,先写什么后写什么

Prompt 写作顺序 第一步&#xff1a;画质词画风词 第一步先写“画质词”和“画风词” 画质词如下&#xff1a; 画风词如下&#xff1a; 第二步&#xff1a;画面主体描述 人物性别、年龄、发型、发色、情绪表情、衣服款式、衣服颜色、动作、饰品、身材、五官微调 第三步&…

多表联查小情景例子

这里有个需求&#xff1a; 需要给定套餐表setmeal 的 id 查询这个套餐内的所有菜品 dish 实际上如果可能&#xff0c;只需要查询套餐菜品表(setmeal_dish)&#xff0c;查看一个套餐内包含包含的所有菜品&#xff0c;然后把这些菜品全部取出即可。 看一下setmeal_dish 表&…

ZnO电阻片在低电场区域的泄漏电流及其电阻的负温度系数

在低电场区域,流过ZnO非线性电阻的泄漏电流小于1mA.泄漏电流不仅与施加的电压幅值有关,而且与温度高低有关。图2.6表示温度对泄漏电流的影响,温度越高,电子在电场作用下定向的运动就越激烈,导致泄漏电流增大。因此温度升高将导致电阳值下降,即ZnO 电阻呈现负温度特性。 一般以…

centos下创建raid6磁盘阵列

在CentOS系统中创建RAID 6阵列&#xff0c;可以使用mdadm工具。 以下是创建RAID 6阵列的基本步骤和示例代码&#xff1a; 安装mdadm工具&#xff08;如果尚未安装&#xff09;&#xff1a; sudo yum install mdadm 假设你有至少四个以上的磁盘设备&#xff08;例如 /dev/sdi…

STM32存储左右互搏 模拟U盘桥接SPI总线FATS读写FLASH W25QXX

STM32存储左右互搏 模拟U盘桥接SPI总线FATS读写FLASH W25QXX STM32的USB接口可以模拟成为U盘&#xff0c;通过FATS文件系统对连接的存储单元进行U盘方式的读写。 这里介绍STM32CUBEIDE开发平台HAL库模拟U盘桥接SPI总线FATS读写W25Q各型号FLASH的例程。 FLASH是常用的一种非易失…

maven archetype项目构架

1、设置环境变量 set MAVEN_HOMED:\SF\java\apache-maven-3.6.3 set path%path%;%MAVEN_HOME%\bin;2、制作archetype mvn -s "D:\SF\java\apache-maven-3.6.3\conf\settings.xml" archetype:create-from-project -DpackageNamecom.demo.esb-s:指定maven的setting文…

LeetCode | 28.找出字符串中第一个匹配项的下标 KMP

这是字符串匹配问题&#xff0c;朴素做法是两重遍历&#xff0c;依次从主串的i位置开始查看是否和模式串匹配&#xff0c;若不匹配就换下一个位置进行判断&#xff0c;直到找到或者遍历完&#xff0c;时间复杂度 O ( m n ) O(m \times n) O(mn) 还可以对主串进行处理&#xff…

vue.js+node.js+mysql在线聊天室源码

vue.jsnode.jsmysql在线聊天室源码 技术栈&#xff1a;vue.jsElement UInode.jssocket.iomysql vue.jsnode.jsmysql在线聊天室源码

单例模式、工厂模式 c++关键字 static

static 关键字的作用&#xff1a; 主要作用在于 控制变量或函数的作用域、生命周期以及它们如何被不同部分的程序访问&#xff0c;从而帮助程序员管理内存、避免命名冲突&#xff0c;并实现特定的设计模式&#xff08;如单例模式&#xff09;。 1. 静态局部变量&#xff1a;当…

区间预测 | Matlab实现EVO-CNN-SVM能量谷算法优化卷积神经网络支持向量机结合核密度估计多置信区间多变量回归区间预测

区间预测 | Matlab实现EVO-CNN-SVM能量谷算法优化卷积神经网络支持向量机结合核密度估计多置信区间多变量回归区间预测 目录 区间预测 | Matlab实现EVO-CNN-SVM能量谷算法优化卷积神经网络支持向量机结合核密度估计多置信区间多变量回归区间预测效果一览基本介绍程序设计参考资…