C++【類和對象】(結束篇)

C++類和對象

  • 1.static成員
  • 2.友元
  • 3.內部類
  • 4.匿名對象
  • 5.對象拷貝時的編譯器優化

1.static成員

  • 用static修飾的成員變量叫做靜態成員變量,靜態成員一定要在類外進行初始化。
  • 靜態成員變量為所有類的共享,放入靜態區,不屬于某個具體對象,不放入對象中。
  • 用static修飾的成員函數叫做靜態成員函數,靜態成員函數沒有this指針。
  • 靜態成員函數訪問其他靜態成員函數,但是不可以訪問其他非靜態的,因為沒有this指針。
  • 非靜態成員函數可以任意訪問其他靜態成員函數和成員變量。
  • 靜態成員也是類的成員,受public,protected,private訪問限定符的限制。
  • 突破類域就可以訪問靜態成員函數的對象,通過類的名字::靜態成員變量或者對象.靜態成員變量來訪問靜態成員變量和靜態成員函數。
  • 靜態成員變量不能在聲明位置給缺省值初始化,因為缺省值是個構造函數初始化列表的,靜態成員變量不屬于某個對象,不走構造函數初始化列表。
#include<iostream>
using namespace std;
class A
{
public:A(){++_scount;}A(const A& t){++_scount;}~A(){--_scount;}static int GetACount(){return _scount;}
private:// 類??聲明static int _scount;
};
// 類外?初始化
int A::_scount = 0;
int main()
{cout << A::GetACount() << endl;A a1, a2;A a3(a1);cout << A::GetACount() << endl;cout << a1.GetACount() << endl;return 0;
}

2.友元

  • 友元提供了?種突破類訪問限定符封裝的方式,友元分為:友元函數和友元類,在函數聲明或者類 聲明的前面加friend,并且把友元聲明放到?個類的里面
  • 外部友元函數可訪問類的私有和保護成員,友元函數僅僅是?種聲明,他不是類的成員函數。
  • 友元函數可以在類定義的任何地方聲明,不受類訪問限定符限制。
  • ?個函數可以是多個類的友元函數
  • 友元類中的成員函數都可以是另?個類的友元函數,都可以訪問另?個類中的私有和保護成員。
  • 友元類的關系是單向的,不具有交換性,比如A類是B類的友元,但是B類不是A類的友元
  • 友元類關系不能傳遞,如果A是B的友元, B是C的友元,但是A不是C的友元。
  • 有時提供了便利。但是友元會增加耦合度,破壞了封裝,所以友元不宜多用。

3.內部類

  • 如果?個類定義在另?個類的內部,這個內部類就叫做內部類。內部類是?個獨?的類,跟定義在全局相比,他只是受外部類類域限制和訪問限定符限制,所以外部類定義的對象中不包含內部類。
  • 內部類默認是外部類的友元類。
  • 內部類本質也是?種封裝,當A類跟B類緊密關聯,A類實現出來主要就是給B類使?,那么可以考慮把A類設計為B的內部類,如果放到private/protected位置,那么A類就是B類的專屬內部類,其他地方都用不了。

4.匿名對象

  • ? 類型(實參) 定義出來的對象叫做匿名對象,相?之前我們定義的 類型 對象名(實參) 定義出來的 叫有名對象
  • 匿名對象?命周期只在當前一行,?般臨時定義?個對象當前用?下即可,就可以定義匿名對象。

5.對象拷貝時的編譯器優化

  • 現代編譯器會為了盡可能提高程序的效率,在不影響正確性的情況下會盡可能減少?些傳參和傳返回值的過程中可以省略的拷貝。
  • 如何優化C++標準并沒有嚴格規定,各個編譯器會根據情況自行處理。當前主流的相對新?點的編譯器對于連續?個表達式步驟中的連續拷貝會進行合并優化,有些更新更"激進"的編譯器還會進行跨行跨表達式的合并優化。

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

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

相關文章

每日一題---腐爛的蘋果(廣度優先搜索)

腐爛的蘋果 給定一個 nm nm 的網格&#xff0c;其中每個單元格中可能有三種值中的一個 0 , 1 , 2。 其中 0 表示這個格子為空、1 表示這個格子有一個完好的蘋果&#xff0c;2 表示這個格子有一個腐爛的蘋果。 腐爛的蘋果每分鐘會向上下左右四個方向的蘋果傳播一次病菌&…

maven筆記

maven介紹和作用 Maven 是一款為 Java 項目構建管理、依賴管理的工具&#xff08;軟件&#xff09;&#xff0c;使用 Maven 可以自動化構建、測試、打包和發布項目&#xff0c;大大提高了開發效率和質量。 主要作用的理解&#xff1a; 依賴管理&#xff1a; 在編寫項目時我…

模板-C++提高編程

C的一種編程思想稱為泛型編程&#xff0c;用到的技術就是模板 C提供兩種模板&#xff1a;函數模板和類模板。 1.函數模板 1.函數模板作用 建立一個通用函數&#xff0c;其返回值類型和形參類型可以用一個虛擬的類型來代替,提高代碼復用性&#xff0c;將類型參數化。 2.語法…

基于Asp.net的物流配送管理系統

作者&#xff1a;計算機學姐 開發技術&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源碼”。 專欄推薦&#xff1a;前后端分離項目源碼、SpringBoot項目源碼、Vue項目源碼、SSM項目源碼、微信小程序源碼 精品專欄&#xff1a;…

順序表和鏈表的對比(一)

前言 今天給小伙伴們分享的是在數據結構中順序表和鏈表的對比。它們在計算機科學和軟件開發中具有廣泛的應用&#xff0c;是理解更復雜數據結構&#xff08;如棧、隊列、樹、圖等&#xff09;的基礎。這次將會給大家從定義初始化&#xff0c;以及功能增刪查改上進行詳細對比&a…

星越L_外后視鏡使用講解

目錄 1.外后視鏡調節 2后視鏡折疊 3.后視鏡加熱 1.外后視鏡調節 L控制左邊后視鏡調節,上下撥動調整視野,一般此鏡左右21分,上下55開。 R控制左邊后視鏡調節,上下撥動調整視野,一般此鏡左右13分,上下55開。 2后視鏡折疊 車輛解鎖自動展開 車輛關閉自動折疊 嚴寒天氣…

DevOps實踐:持續集成與持續部署完全指南

文章目錄 引言&#xff1a;從人工到自動化的進化革命一、CI/CD核心認知升級1.1 持續集成 vs 持續部署 vs 持續交付1.2 中小團隊為什么要實施CI/CD&#xff1f; 二、CI/CD工具鏈選型指南2.1 中小團隊推薦技術棧2.2 工具對比決策矩陣 三、實戰五步構建企業級流水線3.1 基礎環境搭…

【數據結構】數據結構,算法 概念

0.本篇問題&#xff1a; 數據、數據元素、數據對象、數據項之間的基本關系&#xff1f;ADT是什么&#xff1f;數據結構的三要素&#xff1f;數據的邏輯結構有哪些&#xff1f;數據的存儲結構有哪些&#xff1f;算法的五個特征&#xff1f;O(1) O(logn) O(n^n) O(n) O(n^2…

同步Oracle及mysql至KADB的KFS配置文件參考

Oracle源端flysync.ini文件 注意&#xff1a;oracle用戶名大寫 mysql源端flysync.ini文件 附&#xff1a;目標端KADB的flysync.ini文件 [m_kes_3113] 源端為KES kufl-port3113 datasource-typekingbase rolemaster replication-host10.4.43.53 replication-port54321 …

PECL(Positive Emitter-Coupled Logic)電平詳解

一、PECL電平的定義與核心特性 PECL&#xff08;正射極耦合邏輯&#xff09;是一種基于 射極耦合邏輯&#xff08;ECL&#xff09;技術 的高速差分信號標準&#xff0c;采用 正電源供電&#xff08;如5V或3.3V&#xff09;。其核心特性包括 高速傳輸、低噪聲、強抗干擾能力&am…

以 ArcGIS Pro 為筆,繪就水墨地圖畫卷

一、引言 水墨畫&#xff0c;作為中國傳統繪畫藝術的瑰寶&#xff0c;以其獨特的韻味和表現力&#xff0c;在藝術領域占據著重要地位。它通過水與墨的交融&#xff0c;展現出山水之間的靈動與韻味。 而將這種藝術形式與現代地理信息系統&#xff08;GIS&#xff09;技術相結合…

軟考網絡安全專業

隨著信息技術的迅猛發展&#xff0c;網絡安全問題日益凸顯&#xff0c;成為社會各界普遍關注的焦點。在這樣的背景下&#xff0c;軟考網絡安全專業應運而生&#xff0c;為培養高素質的網絡安全人才提供了有力支撐。本文將對軟考網絡安全專業進行深入剖析&#xff0c;探討其在信…

在線 SQL 轉 SQLAlchemy:一鍵生成 Python 數據模型

一款高效的在線 SQL 轉 SQLAlchemy 工具&#xff0c;支持自動解析 SQL 語句并生成 Python SQLAlchemy 模型代碼&#xff0c;適用于數據庫管理、后端開發和 ORM 結構映射。無需手寫 SQLAlchemy 模型&#xff0c;一鍵轉換 SQL 結構&#xff0c;提升開發效率&#xff0c;簡化數據庫…

自定義tiptap插件

本文為開發開源項目的真實開發經歷&#xff0c;感興趣的可以來給我的項目點個star&#xff0c;謝謝啦~ 具體博文介紹&#xff1a; 開源&#xff5c;Documind協同文檔&#xff08;接入deepseek-r1、支持實時聊天&#xff09;Documind &#x1f680; 一個支持實時聊天和接入 - 掘…

網絡安全需要學多久才能入門?

網絡安全是一個復雜且不斷發展的領域&#xff0c;想要入行該領域&#xff0c;我們需要付出足夠多的時間和精力好好學習相關知識&#xff0c;才可以獲得一份不錯的工作&#xff0c;那么網絡安全需要學多久才能入門?我們通過這篇文章來了解一下。 學習網絡安全的入門時間因個人的…

EG82088串口邊緣計算網關

EG82088串口邊緣計算網關 EG8208是一款專業級8路獨立隔離型RS485通訊控制器,通過Modbus及JSON支持、靈活的TCP/IP和UDP切換、內置監控自診斷等特性,廣泛應用于工業自動化、樓宇管理等領域,為用戶提供卓越的數據采集和設備管理解決方案。 接口類型&#xff1a;8RS485/8DO/1LAN協…

Linux下GCC和C++實現帶多組標簽的Snowflake SQL查詢批量數據導出程序

設計一個基于多個帶標簽Snowflake SQL語句作為json配置文件的Linux下GCC的C代碼程序&#xff0c;實現根據不同的輸入參數自動批量地將Snowflake數據庫的數據導出為CSV文件到本地目錄上&#xff0c;標簽加擴展名.csv為導出數據文件名&#xff0c;文件已經存在則覆蓋原始文件。需…

Trae AI 輔助修復uniapp 微信小程序的Bug

一、transparent的兼容問題 設計稿&#xff1a; 實際在iphone 6 plu上&#xff1a; 直接讓Trae AI修復&#xff1a; 修改后驗證通過。 二、v-if分支中子元素根據輸入框中內容長度動態添加class樣式失效 遇到了個“怪問題”&#xff0c;在其他手機或者開發者工具都正常。也…

conda install 和 pip install 的區別

conda install 和 pip install 是兩個常用的包安裝命令&#xff0c;但它們在很多方面存在差異。 1. 所屬管理系統不同 1.1 conda install conda install 是Anaconda和Miniconda發行版自帶的包管理工具 conda 的安裝命令。conda 是一個跨平臺的開源包管理系統和環境管理系統&…

uni-app App 端分段導出 JSON 數據為文件

在開發過程中&#xff0c;我們經常需要將大量數據導出為 JSON 文件&#xff0c;尤其是在處理長列表或大數據集時。然而&#xff0c;直接將所有數據寫入一個文件可能會導致性能問題&#xff0c;尤其是在移動設備上。為了優化性能并提高用戶體驗&#xff0c;我們可以將數據分段導…