C++ 精简知识点

目录

一、核心语法

1.指针VS引用

2. 类与对象(必写代码)

3. 继承与多态(必写代码)

4. 模板(必写代码)

5.智能指针

 6. 异常处理(必写结构)

二、简答题速记

三、考试应急策略


一、核心语法
1.指针VS引用
区别指针引用
定义存储地址的变量,可改指向变量的别名,绑定后不可改
初始化可空(nullptr)、延迟初始化必须初始化,不能引用空值
访问需解引用(*p/->直接用变量名,语法同原变量
空值允许nullptr无空引用,绑定后必有效
自增/减支持(移动地址)不支持(别名不变)

代码示例:

cpp运行

int a = 10;
int* p = &a;  // 指针存地址
int& ref = a; // 引用是别名 p = nullptr;  // 指针可改指向
// ref = nullptr;  // 错误!引用不能改绑定
2. 类与对象(必写代码)

封装 + 构造 / 析构 + 拷贝控制

cpp运行

class Student {
private:string name;int age;
public:// 构造函数(重载 + 初始化列表)Student(string n = "无名", int a = 0) : name(n), age(a) {}  // 拷贝构造(深拷贝场景需手动写,如含指针成员)Student(const Student& other) : name(other.name), age(other.age) {}  // 析构函数(含动态内存时必写,如指针)~Student() { /* 释放资源 */ }  // 成员函数void print() const { cout << "姓名:" << name << ",年龄:" << age << endl; }
};// 调用示例
Student zs("张三", 18);
zs.print(); 
Student ls = zs; // 调用拷贝构造
3. 继承与多态(必写代码)

虚函数 + 纯虚函数 + 多态调用

cpp运行

class Animal {
public:// 纯虚函数(抽象类,强制派生类实现)virtual void speak() = 0;  // 虚析构(避免派生类对象析构不完整)virtual ~Animal() {}  
};class Dog : public Animal {
public:void speak() override { // override 显式重写cout << "汪汪!" << endl; }
};// 多态调用(基类指针/引用指向派生类对象)
Animal* animal = new Dog();
animal->speak(); // 输出“汪汪!”(运行时绑定)
delete animal;
4. 模板(必写代码)

函数模板 + 类模板

// 函数模板(泛型交换)
template <typename T>
void swap(T& a, T& b) {T temp = a;a = b;b = temp;
}// 类模板(简单栈)
template <typename T>
class Stack {
private:vector<T> data;
public:void push(const T& val) { data.push_back(val); }T pop() { T top = data.back();data.pop_back();return top; }
};// 调用示例
Stack<int> s;
s.push(10);
int x = s.pop();
5.智能指针
类型特点场景
unique_ptr独占所有权,不可拷贝简单对象管理,避免资源泄漏
shared_ptr共享所有权(引用计数)多对象共享资源,需注意循环引用
weak_ptr弱引用(不影响计数)解决shared_ptr循环引用

代码示例:

// unique_ptr(独占)
unique_ptr<Student> p1 = make_unique<Student>("李四", 20);// shared_ptr(共享)
shared_ptr<Student> p2 = make_shared<Student>("王五", 22);
shared_ptr<Student> p3 = p2; // 引用计数+1// weak_ptr(弱引用)
weak_ptr<Student> p4 = p2; // 不影响计数
 6. 异常处理(必写结构)
try {// 可能抛异常的代码if (error) throw runtime_error("出错了!"); 
} catch (const runtime_error& e) {// 捕获特定异常cout << "错误:" << e.what() << endl; 
} catch (...) {// 兜底捕获cout << "未知异常" << endl; 
}
二、简答题速记

1. 指针和引用的区别

定义:指针存地址,可改指向;引用是别名,绑定后不可改。
初始化:指针可空、延迟初始化;引用必须初始化,不能引用空值。
访问:指针需解引用(*p);引用直接用变量名。
空值:指针允许nullptr;引用无空引用。


2. 虚函数的实现原理

虚函数表(vtable):每个含虚函数的类编译时生成虚表,存储虚函数地址。
虚表指针(vptr):对象构造时,vptr 指向类的虚表。
调用机制:通过 vptr 查表,运行时动态绑定函数(多态的核心)。


3. 拷贝构造函数的调用场景

用对象初始化新对象:Student s2 = s1; 或 Student s2(s1);。
函数按值传递对象:void func(Student obj),调用时拷贝实参。
函数返回对象(值返回):Student func() { Student s; return s; },返回时拷贝临时对象。


4. 内存泄漏及解决方法

内存泄漏:动态分配的内存(new/malloc)未释放,长期占用内存。
解决方法:
用智能指针(unique_ptr/shared_ptr)自动管理。
严格配对 new/delete、malloc/free。
工具检测(如 Valgrind、AddressSanitizer)。


5. 重载(overload)、覆盖(override)、重写(overwrite)区别

重载(overload):同一作用域,函数名相同,参数(类型 / 个数 / 顺序)不同,编译期决议。
覆盖(override):派生类重写基类虚函数,函数签名(名、参数、返回)完全一致,运行期多态。
重写(overwrite):非标准说法,常指覆盖(override)或隐藏基类函数(如派生类定义同名非虚函数)。

三、考试应急策略

代码题:优先写框架(类定义、函数模板结构),再补细节(构造函数、虚函数、智能指针)。
简答题:抓关键词(如 “虚函数表”“引用计数”“拷贝场景”),按点作答。
易错点

  • 多态必须用虚函数 + 基类指针 / 引用。
  • 智能指针注意 unique_ptr 不可拷贝,shared_ptr 需避免循环引用。
  • 模板代码记得写 template <typename T>。

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

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

相关文章

7.Vue的compute计算属性

3.8. 【computed】 作用&#xff1a;根据已有数据计算出新数据&#xff08;和Vue2中的computed作用一致&#xff09;。 <template><div class"person">姓&#xff1a;<input type"text" v-model"firstName"> <br>名&am…

在VSCode中借助AI丰富C++Qt应用程序

随着国内外各类自动化编程助手的普及&#xff0c;作为传统桌面C开发者&#xff0c;也要及时地用上这样强大的工具。考虑到网速问题&#xff0c;国外的服务时断时续&#xff0c;还是倾向于使用一些国产的大语言模型助手。我们今天就来看看在VSCode下使用大语言模型辅助Qt开发。 …

Java八股文——JVM「内存模型篇」

JVM的内存模型介绍一下 面试官您好&#xff0c;您问的“JVM内存模型”&#xff0c;这是一个非常核心的问题。在Java技术体系中&#xff0c;这个术语通常可能指代两个不同的概念&#xff1a;一个是JVM的运行时数据区&#xff0c;另一个是Java内存模型&#xff08;JMM&#xff0…

RabbitMQ 高可用与可靠性保障实现

RabbitMQ 高可用与可靠性保障实现详解 一、高可用架构设计1.1 集群部署模式1.2 镜像队列&#xff08;Mirrored Queue&#xff09; 二、可靠性保障机制2.1 消息持久化2.2 确认机制&#xff08;Confirm & Ack&#xff09;2.3 死信队列&#xff08;DLX&#xff09; 三、容灾与…

12.7Swing控件6 JList

在 Java Swing 中&#xff0c;列表框&#xff08;JList&#xff09;是用于显示一组选项的组件&#xff0c;用户可以从中选择一个或多个项目。以下是关于 Swing 列表框的详细介绍&#xff1a; 1. 基本概念与用途 作用&#xff1a;以垂直列表形式展示选项&#xff0c;支持单选或…

C++: condition_variable: wait_for -> unlock_wait_for_lock?

作为C++的初学者,面临的一个很大的问题,就是很多的概念并不是可以通过名称直观的预知它要完成的细节,比如这里的condition_variable的wait_for。C++的设计意图好像是,我告诉你这样用,你只要这样做就行,又简单还实用!而且需要记住的规则量又大的惊人。最后看起来,更像是…

HTML版英语学习系统

HTML版英语学习系统 这是一个完全免费、无需安装、功能完整的英语学习工具&#xff0c;使用HTML CSS JavaScript实现。 功能 文本朗读练习 - 输入英文文章&#xff0c;系统朗读帮助练习听力和发音&#xff0c;适合跟读练习&#xff0c;模仿学习&#xff1b;实时词典查询 - 双…

【JUC面试篇】Java并发编程高频八股——线程与多线程

目录 1. 什么是进程和线程&#xff1f;有什么区别和联系&#xff1f; 2. Java的线程和操作系统的线程有什么区别&#xff1f; 3. 线程的创建方式有哪些? 4. 如何启动和停止线程&#xff1f; 5. Java线程的状态模型&#xff08;有哪些状态&#xff09;&#xff1f; 6. 调用…

LSTM-SVM多变量时序预测(Matlab完整源码和数据)

LSTM-SVM多变量时序预测&#xff08;Matlab完整源码和数据&#xff09; 目录 LSTM-SVM多变量时序预测&#xff08;Matlab完整源码和数据&#xff09;效果一览基本介绍程序设计参考资料 效果一览 基本介绍 代码主要功能 该代码实现了一个LSTM-SVM多变量时序预测模型&#xff0c…

ES6——数组扩展之Set数组

在ES6&#xff08;ECMAScript 2015&#xff09;中&#xff0c;JavaScript的Set对象提供了一种存储任何值唯一性的方式&#xff0c;类似于数组但又不需要索引访问。这对于需要确保元素唯一性的场景非常有用。Set对象本身并不直接提供数组那样的方法来操作数据&#xff08;例如ma…

日志收集工具-logstash

提示&#xff1a;Windows 环境下 安装部署 logstash 采集日志文件 文章目录 一、下载二、解压部署三、常用插件四、常用配置 Logstash 服务器数据处理管道&#xff0c;能够从多个来源采集数据&#xff0c;转换数据&#xff0c;然后将数据发送到您最喜欢的存储库中。Logstash 没…

6个月Python学习计划 Day 21 - Python 学习前三周回顾总结

✅ 第一周&#xff1a;基础入门与流程控制&#xff08;Day 1 - 7&#xff09; “打地基”的一周&#xff0c;我们走完了从变量、输入输出、判断、循环到第一个小型系统的完整链路。 &#x1f4d8; 学习重点&#xff1a; Python 基础语法&#xff1a;变量类型、字符串格式化、注…

Spring Boot SQL数据库功能详解

Spring Boot自动配置与数据源管理 数据源自动配置机制 当在Spring Boot项目中添加数据库驱动依赖&#xff08;如org.postgresql:postgresql&#xff09;后&#xff0c;应用启动时自动配置系统会尝试创建DataSource实现。开发者只需提供基础连接信息&#xff1a; 数据库URL格…

java每日精进 6.11【消息队列】

1.内存级Spring_Event 1.1 控制器层&#xff1a;StringTextController /*** 字符串文本管理控制器* 提供通过消息队列异步获取文本信息的接口*/ RestController RequestMapping("/api/string-text") public class StringTextController {Resourceprivate StringTex…

【凌智视觉模块】rv1106 部署 ppocrv4 检测模型 rknn 推理

PP-OCRv4 文本框检测 1. 模型介绍 如有需要可以前往我们的仓库进行查看 凌智视觉模块 PP-OCRv4在PP-OCRv3的基础上进一步升级。整体的框架图保持了与PP-OCRv3相同的pipeline&#xff0c;针对检测模型和识别模型进行了数据、网络结构、训练策略等多个模块的优化。 从算法改…

uniapp Vue2 获取电量的独家方法:绕过官方插件限制

在使用 uniapp 进行跨平台应用开发时&#xff0c;获取设备电量信息是一个常见的需求。然而&#xff0c;uniapp 官方提供的uni.getBatteryInfo方法存在一定的局限性&#xff0c;它不仅需要下载插件&#xff0c;而且目前仅支持 Vue3&#xff0c;这让使用 Vue2 进行开发的开发者陷…

Go语言中的if else控制语句

if else是Go语言中最基础也最常用的条件控制语句&#xff0c;用于根据条件执行不同的代码块。下面我将详细介绍Go语言中if else的各种用法和特性。 1. 基本语法 1.1. 最简单的if语句 if 条件表达式 {// 条件为true时执行的代码 } 示例&#xff1a; if x > 10 {fmt.Prin…

[Spring]-AOP

AOP场景 AOP: Aspect Oriented Programming (面向切面编程) OOP: Object Oriented Programming (面向对象编程) 场景设计 设计: 编写一个计算器接口和实现类&#xff0c;提供加减乘除四则运算 需求: 在加减乘除运算的时候需要记录操作日志(运算前参数、运算后结果)实现方案:…

Web3 借贷与清算机制全解析:链上金融的运行逻辑

Web3 借贷与清算机制全解析&#xff1a;链上金融的运行逻辑 超额抵押借款 例如&#xff0c;借款人用ETH为抵押借入DAI&#xff1b;借款人的ETH的价值一定是要超过DAI的价值&#xff1b;借款人可以任意自由的使用自己借出的DAI 稳定币 第一步&#xff1a;借款人需要去提供一定…

RK3588开发笔记-GNSS-RTK模块调试

目录 前言 一、什么是GNSS/RTK 二、硬件连接 三、内核配置 四、模块调试 五、ntripclient使用 总结 前言 在RK3588平台上集成高精度定位功能是许多工业级应用的需求。本文记录了我调试GNSS-RTK模块的全过程,包含硬件连接、驱动移植、数据解析和精度优化等关键环节,希望对…