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
繁體地址,請注明出處:http://hk.pswp.cn/diannao/86717.shtml
英文地址,請注明出處:http://en.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模塊的全過程,包含硬件連接、驅動移植、數據解析和精度優化等關鍵環節,希望對…