C++ 初階 | 類和對象易錯知識點(下)

目錄

0.引言

1.初始化列表

2.static

靜態成員變量:

靜態成員函數:

3.友元函數

4.內部類

定義:

特點:

應用:

5.優化寫法

6.例題? ?求和1+2+...+n? (不能用for/while/if/else等關鍵字)

7.總結


0.引言

今天,咱接著上文,繼續來嘮嘮類和對象中的易錯知識點😄😄😄

1.初始化列表

🚩形式:類名(類型名 參數):成員變量名(形參1),成員變量名(形參2)...{}

? ?// eg: A ( int? a) : _a1(a),_a2(a1){}

class A

{

public:

A ( int? a) : _a1(a),_a2(a1){}

private:

int _a1;

int _a2;? ? //★?tip:初始化列表列表順序盡量與聲明順序一致,因為初始化是按聲明順序進行的。

}

🚩必須要使用初始化列表的情況:1)引用成員變量;2)const成員變量;3)沒有默認構造的類類型。

🚩成員變量走初始化列表的邏輯順序:👇👇👇

2.static

靜態成員變量:

?靜態成員變量不屬于某個對象,屬于整個類(這個類的所有對象);

?靜態成員變量需要在類外初始化。

靜態成員函數:

?靜態成員函數沒有this指針;

?非靜態成員函數可以訪問靜態成員變量,靜態成員函數只能訪問靜態成員變量。

static int GetCount()

{

? ?// ++_a1;? ?// 不能訪問非靜態成員變量,沒有this指針

?return? _count;

}

3.友元函數

🚩形式:在函數/類聲明前+friend(友元函數聲明位置可以任意,不受類訪問限定符限制)

🚩友元函數僅僅是一種聲明,它不是類的成員函數;

🚩友元函數調用時,與普通函數類似,不會調用this指針(因為它不屬于類)

🚩外部友元函數可以訪問類的所有成員,但是,它是單向的(即A是B 的友元函數,A可以訪問B的私有成員變量;但是B不一定能訪問A);

🚩友元關系不能傳遞?

4.內部類

定義:

一個類定義在另一個類的內部,這個內部類就叫做內部類。

特點:

?只是受外部類類域限制和訪問限定符限制,所以外部類定義的對象中不包含(不會額外開辟資源內部類;

?內部類默認是外部類的友元類

?內部類是平行關系(獨立開),主要是受類域和訪問限定符限制。

應用:

?當A類跟B類緊密關聯,A類實現出來主要就是給B類使用,那么可以考把A類設計為B的內部類;

? A如果放到B類的private/protected位置,那么A類就是B類的專屬內部類,其他地方都用不了。

5.優化寫法

?匿名對象(生命周期只在當前一行)

eg:

A();

A(11);

??傳值傳參

// 傳值傳參 ->無優化

? ?A aal(1);
? ?f1(aa1);? ? ? ? ? ? ? ? ? ? //不推薦?

? ?cout<<endl;? ? ?

// 構造+拷貝構造﹣>優化直接構造
f1(A(1));? ? ? ? ? ? ? ? ? ? ?//推薦 ?
cout << endl << endl;?

//?f1(1);? ? ? ? ? ? ? ? ? ? ? ??//推薦 ?

?返回

?// 一個表達式中,連續拷貝構造+賦值
A aa3;
?aa3=f2();? ? ? ? ? ? ? ? ? ? //不推薦? ?

cout << endl;

? // 返回時一個表達式中,連續拷貝構? ?
A aa2 = f2();
?cout << endl ;? ? ? ? ? ? ??//推薦 ?

6.例題? ?求和1+2+...+n? (不能用for/while/if/else等關鍵字)

核心代碼👇👇👇

#include <iostream>class Sum
{public:Sum(){_ret+=_i;_i++;};static int Getret(){return _ret;}private:static int _i;static int _ret;
};
int Sum ::_i=1;
int Sum ::_ret=0;
class Solution {
public:int Sum_Solution(int n) {Sum a[n];return Sum::Getret();}
};int main()
{
Solution s;
int n = 100;
int result = s.Sum_Solution(n);
cout<< "The sum from 1 to "<< n << " is: " << result <<endl;
return 0;

在上述測試代碼中,創建 Solution 類對象 s ,調用 Sum_Solution 函數計算1到100的累加和并輸出。運行后會輸出1到100的累加和為5050(通過 Sum 類構造靜態成員函數的累加邏輯實現)。

7.總結

看了上面的代碼,咱們是不是覺得今天的知識點,得到了運用呢🤭

希望大家可以和小鄧兒一起學習和進步哈O(∩_∩)O

都看這么久了呢,別忘了一鍵三連哦😘😘😘

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/907739.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/907739.shtml
英文地址,請注明出處:http://en.pswp.cn/news/907739.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用yocto搭建qemuarm64環境

環境 yocto下載 # 源碼下載 git clone git://git.yoctoproject.org/poky git reset --hard b223b6d533a6d617134c1c5bec8ed31657dd1268 構建 # 編譯鏡像 export MACHINE"qemuarm64" . oe-init-build-env bitbake core-image-full-cmdline 運行 # 跑虛擬機 export …

AWS WebRTC:獲取ICE服務地址(part 3):STUN服務和TURN服務的作用

STUN服務和TURN服務的作用&#xff1a; 服務全稱作用是否中繼流量適用場景STUNSession Traversal Utilities for NAT 協助設備發現自己的公網地址&#xff08;srflx candidate&#xff09; ? 不中繼&#xff0c;僅輔助NAT 穿透成功時使用TURNTraversal Using Relays around N…

分析XSSstrike源碼

#用于學習web安全自動化工具# 我能收獲什么&#xff1f; 1.XSS漏洞檢測機制 學習如何構造和發送XSS payload如何識別響應中的回顯&#xff0c;WAF&#xff0c;過濾規則等如何使用詞典&#xff0c;編碼策略&#xff0c;上下文探測等繞過過濾器 2.Python安全工具開發技巧 使…

npm run build 報錯:Some chunks are larger than 500 KB after minification

當我們的 Vue 項目太大&#xff0c;使用 npm run build 打包項目的時候&#xff0c;就有可能會遇到以下報錯&#xff1a; (!) Some chunks are larger than 500 kB after minification. Consider: - Using dynamic import() to code-split the application - Use build.rollup…

【LLM相關知識點】關于LLM項目實施流程的簡單整理(一)

【LLM相關知識點】關于LLM項目實施流程的簡單整理&#xff08;一&#xff09; 文章目錄 【LLM相關知識點】關于LLM項目實施流程的簡單整理&#xff08;一&#xff09;零、學習計劃梳理&#xff1a;結合ChatGPT從零開始學習LLM & 多模態大模型一、大模型相關應用場景和頭部企…

海上石油鉆井平臺人員安全管控解決方案

一、行業挑戰與需求分析 海上鉆井平臺面臨復雜環境風險&#xff08;如易燃易爆、金屬干擾、極端氣象&#xff09;和人員管理難題&#xff08;如定位模糊、應急響應延遲&#xff09;。傳統RFID或藍牙定位技術存在精度不足&#xff08;1-5米&#xff09;、抗干擾能力差等問題&am…

@Docker Compose 部署 Pushgateway

文章目錄 Docker Compose 部署 Pushgateway1. 目的2. 適用范圍3. 先決條件4. 部署步驟4.1 創建項目目錄4.2 創建 docker-compose.yml 文件4.3 啟動 Pushgateway 服務4.4 驗證服務運行狀態4.5 測試 Pushgateway 訪問 5. 配置 Prometheus 采集 Pushgateway 數據6. 日常維護6.1 查…

項目 react+taro 編寫的微信 小程序,什么命令,可以減少console的顯示

在 Taro 項目中&#xff0c;為了減少 console 的顯示&#xff08;例如 console.log、console.info 等&#xff09;&#xff0c;可以通過配置 terser-webpack-plugin 來移除生產環境中的 console 調用。 配置步驟&#xff1a; 修改 index.js 文件 在 mini.webpackChain 中添加 …

Java開發中常見的數值處理陷阱與規避方法

八進制字面量的誤用問題 歷史背景與語法特性 由于歷史原因,Java保留了八進制字面量的支持。八進制字面量以數字0開頭,例如037表示十進制數31(計算方式:38 + 7 = 31)。這種表示法在現代編程中極少使用,唯一合理的應用場景是表示Unix文件權限(如0644表示用戶可讀寫,組和…

Lua5.4.2常用API整理記錄

一、基礎函數 1.type(value)?? 返回值的類型&#xff08;如 "nil", "number", "string", "table", "function" 等&#xff09;。 代碼測試&#xff1a; a 0 print(type(a)) a nil print(type(a)) a "aaaaaaaa&…

2025.5.29 學習日記 docker概念以及基本指令

Docker&#xff1a; Docker 是一種開源的容器化平臺&#xff0c;用于快速部署應用程序&#xff0c;實現開發、測試和生產環境的一致性。 一、Docker 核心概念 鏡像&#xff08;Image&#xff09; 只讀的模板文件&#xff0c;用于創建容器&#xff0c;類似虛擬機的鏡像&#x…

明遠智睿SSD2351開發板:語音機器人領域的變革力量

在人工智能快速發展的今天&#xff0c;語音機器人逐漸成為人們生活和工作中的得力助手。明遠智睿SSD2351開發板憑借強大性能與豐富功能&#xff0c;為語音機器人的發展注入新動力&#xff0c;成為該領域的變革力量。 SSD2351開發板的四核1.4GHz處理器具備強勁的運算性能&#x…

嵌入式學習筆記 - keil安裝目錄下的頭文件自動包含問題

Keil MDK/MDK-ARM&#xff08;ARM編譯器&#xff09;默認情況下會自動包含其安裝目錄下的標準頭文件路徑&#xff08;如CMSIS庫、設備頭文件等&#xff09;。具體機制如下&#xff1a; ?默認自動包含?&#xff1a; 新建工程或使用設備數據庫選擇芯片型號后&#xff0c;Keil會…

什么是數據驅動?以及我們應如何理解數據驅動?

在談到企業數字化轉型時&#xff0c;很多人都會說起“數據驅動”&#xff0c;比如“數據驅動運營”、“數據驅動業務”等等。 在大家言必稱“數據驅動”的時代背景下&#xff0c;我相信很多人并未深究和思考“數據驅動”的真正含義&#xff0c;只是過過嘴癮罷了。那么&#xff…

C++中全局變量和局部變量的區別

C中全局變量和局部變量的區別 在C&#xff08;以及其他編程語言&#xff09;中&#xff0c;變量的作用域和生命周期是兩個非常重要的概念。全局變量和局部變量在作用域和生命周期上有顯著的區別。下面我將詳細講解全局變量和局部變量的區別&#xff0c;并通過代碼示例來幫助理…

基于RPA技術的ECRobot企業智能體解決方案,打通企業自動化業務流程的最后一公里

在企業的日常運營中&#xff0c;難免會遇到一些繁瑣且重復的任務&#xff0c;這類高頻次、低復雜度的事務性工作往往造成人力資源和成本的浪費。因此如何通過智能化工具實現流程自動化&#xff0c;已經成為企業數字化轉型進程中的共性課題。 RPA技術&#xff1a;自動化賦能企業…

ipv6與p2p的關系

在PCDN&#xff08;P2P內容分發網絡&#xff09;領域&#xff0c;IPv6與PCDN盒子的關系緊密且相互影響&#xff0c;主要體現在以下幾個方面&#xff1a; 一、IPv6的部署推動PCDN盒子普及 地址資源充足 IPv6采用128位地址&#xff0c;解決了IPv4地址枯竭的問題&#xff0c;為PC…

大模型應用開發之預訓練

預訓練是研發大語言模型的第一個訓練階段&#xff0c;通過在大規模語料上進行預訓練&#xff0c;大語言模型可以獲得通用的語言理解與生成能力&#xff0c;掌握較為廣泛的世界知識&#xff0c;具備解決眾多下游任務的性能潛力 一、數據預處理 1. 數據的收集 1&#xff09;通…

[python]Prophet‘ object has no attribute ‘stan_backend‘解決方法

測試環境&#xff1a; prophet1.1.4 寫代碼&#xff1a; from prophet import Prophet modelProphet() print(123) 在anaconda prompt里面沒有報錯&#xff0c;但是打開jupyter notebook會報錯Prophet object has no attribute stan_backend&#xff0c;據此猜測jupyter應該…

【HTML】基礎學習【數據分析全棧攻略:爬蟲+處理+可視化+報告】

- 第 102 篇 - Date: 2025 - 05 - 31 Author: 鄭龍浩/仟墨 文章目錄 HTML 基礎學習一 了解HTML二 HTML的結構三 HTML標簽1 標題2 文本段落3 換行4 加粗、斜體、下劃線5 插入圖片6 添加鏈接7 容器8 列表9 表格10 class類 HTML 基礎學習 一 了解HTML 一個網頁分為為三部分&…