從C++開始的編程生活(7)——取地址運算符重載、類型轉換、static成員和友元

前言

本系列文章承接C語言的學習,需要有C語言的基礎才能學會哦~
第7篇主要講的是有關于C++的取地址運算符重載類型轉換static成員友元
C++才起步,都很簡單

目錄

前言

取地址運算符重載

const成員函數

基本語法

特點

取地址運算符重載

類型轉換

static成員

友元

特點


取地址運算符重載

const成員函數

tips:const只有在修飾指向內容的時候,才設計權限的放大和縮小的問題。

基本語法

//無const,傳入參數為Date* const this,不可修改this指針本身
void Print() 
{cout << _year << "-" << _month << "-" <<_day;
}//有const,傳入參數為const Date* const this,不可修改this指針和其指向的內容
void Print() const
{cout << _year << "-" << _month << "-" <<_day;
}

如上,const修飾后的成員函數Print,不可以在對類的任何成員進行修改

特點

const修飾的成員函數,const放在參數列表后。
②const修飾后,成員函數不可以修改類對象的任何成員

使用const,可以避免成員被意外修改,應加盡加

取地址運算符重載

對于自定義類型,只要是運算符,要使用必須先重載。

Date* operator&()
{return this;
}const Date* operator&() const
{return this;
}

為了避免權限問題需要重載取Date*指針和const Date*指針或者可以自定義返回一個任意地址(也可空指針),不過要當心出錯。

類型轉換

C++11,支持內置類型隱式類型轉化為自定義類型,但是需要有相關內置類型為參數的構造函數
該隱式轉換過程中需要調用到構造函數。

//類A的構造函數
A(int a1)
:_aa1(a1)
{}//運行代碼
A aa1 = 1;

①語法上,先用常數1作為構造函數的參數構造一個臨時對象,再用這個臨時對象拷貝構造為aa1。這里會出現連續的構造,而編譯器會將其優化為直接一次構造

A& aa2 = 1;//不可行×

如上,要注意以1構造的臨時對象為const修飾,要注意權限問題。

const A& aa3 = 1;

如果不想發生內置類型隱式轉換為自定義類型,則用關鍵字explicit
③若A類型有多個內置類型成員(構造函數有多個參數),想用兩個或以上參數進行隱式轉換,需要用大括號和逗號表達。(如下)。

A aa3 = {1, 1}

static成員

①static修飾的成員變量,成為靜態成員變量,static變量必須要在類外初始化。(類里面聲明,類外初始化
②static成員變量不屬于某個具體對象存放在靜態區
③static修飾的成員函數,稱之為靜態成員函數,static函數沒有this指針
④static成員函數可以訪問靜態成員但是不能訪問非靜態的成員,因為他沒有this指針,沒有隱藏的this指針
不可以在聲明時給static成員變量缺省值
非靜態成員函數可以訪問任意的靜態成員變量和靜態成員函數
⑦同樣受訪問限定符限制
?

友元

提供了一種突破類訪問限定符的封裝來訪問的方式,在聲明前加friend修飾,友元分為友元函數友元類

特點

①友元函數可以訪問類的私有和保護成員,但他只是聲明不是類的成員函數而是外部函數
②友元可以在類的任何位置聲明不受訪問限定符的限制
③一個類中,友元類的成員函數也是該類的友元函數
一個函數可以是多個類的友元函數
不具有交換性和傳遞性。比如,A是B的友元,但是B不是A的友元;A是B的友元,B是C的友元,但是A不是C的友元。
友元會破壞封裝,所以不適宜多用

?~~本文完結!!感謝觀看!!接下來更精彩!!歡迎來我博客做客~~?

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

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

相關文章

SQL 入門指南:排序與分頁查詢(ORDER BY 多字段排序、LIMIT 分頁實戰)

在 SQL 查詢中&#xff0c;我們常需要 “按報名時間先后看活動名單”“只看第 2 頁的活動報名數據”—— 這些需求靠基礎查詢無法實現&#xff0c;而ORDER BY&#xff08;排序&#xff09; 和LIMIT&#xff08;分頁&#xff09; 就是解決這類問題的核心工具。今天我們用 “校園…

jodconverter將word轉pdf底層libreoffice的問題

近期項目中使用了word轉pdf的功能&#xff0c;其中借助了遠程服務的jodconverter來處理。 <dependency><groupId>org.jodconverter</groupId><artifactId>jodconverter-remote</artifactId><version>4.4.2</version> </dependen…

【為YOLOv11Seg添加MFC界面】詳細指南

要將現有的YOLOv11Seg代碼集成到MFC界面中,我們需要創建一個MFC應用程序框架,并將現有的檢測邏輯封裝到其中。以下是詳細步驟: 1. 創建MFC應用程序框架 1.1 使用Visual Studio創建MFC項目 打開Visual Studio,選擇"創建新項目" 選擇"MFC應用程序"模板…

機器學習03——線性模型(多元線性回歸、對數線性回歸、二分類、線性判別分析)

上一章&#xff1a;機器學習02——模型評估與選擇 下一章&#xff1a;機器學習04——決策樹 機器學習實戰項目&#xff1a;【從 0 到 1 落地】機器學習實操項目目錄&#xff1a;覆蓋入門到進階&#xff0c;大學生就業 / 競賽必備 文章目錄一、線性模型的基本形式&#xff08;一…

qt QLineSeries詳解

1、概述QLineSeries是Qt Charts模塊中的一個重要類&#xff0c;用于繪制折線圖。它是QXYSeries的實現類&#xff0c;將信息顯示為由直線連接的一系列數據點。該類為QAbstractSeries的子類&#xff0c;因此可以通過該類來訪問QAbstractSeries的所有公共方法和屬性。2、重要方法c…

你再也找不到更詳細的3DGS教程了 —— 一萬九千字長文解析3DGS

參考: https://www.bilibili.com/video/BV1MF4m1V7e3/ https://blog.csdn.net/2401_86810419/article/details/148811121 https://www.bilibili.com/video/BV1cz421872F?t=233.9 https://wuli.wiki/online/SphHar.html https://zhuanlan.zhihu.com/p/467466131 特別指出…

Python,遺傳算法與神經網絡架構搜索:基于DEAP的自動模型設計

引言&#xff1a;當進化論遇見深度學習——自動化的黎明在深度學習的蠻荒時代&#xff0c;我們是“手工匠人”。我們依靠直覺、前輩的經驗&#xff08;ResNet 為什么是152層而不是153層&#xff1f;&#xff09;、大量的試錯以及那么一點點玄學&#xff0c;在架構的黑暗森林中摸…

Vue框架技術詳解——項目驅動概念理解【前端】【Vue】

Vue3框架 是前端渲染框架瀏覽器向服務器第一次發送請求&#xff0c;就會將所有頁面的樣式全部返回到瀏覽器vue中會將所有js文件最后打包成一個js文件&#xff0c;當前訪問其中一個頁面時&#xff0c;其他頁面的樣式也已經返回到瀏覽器中了&#xff0c;下次切換頁面時&#xff…

HTML 網頁靜態托管 API 接口文檔(可集成到智能體Agent)

HTML 網頁靜態托管 API 接口文檔&#xff08;可集成到智能體Agent&#xff09; 接口概述 本接口用于將HTML代碼轉換為可訪問的網頁&#xff0c;支持通過API密鑰進行身份驗證。 API 密鑰申請地址&#xff1a; https://www.cuobiezi.net/user/api_keys/apply API接口信息 接…

springboot vue sse消息推送,封裝系統公共消息推送前后端方法

概述 1、封裝springboot全局的消息推送接口&#xff1b; 注&#xff1a;1&#xff09;由于原生HTML5 EventSource 不支持添加header&#xff0c;所以要把連接創建接口加入身份驗證白名單&#xff0c;并在接口內添加自己校驗token2&#xff09;后臺需定時心跳&#xff0c;保證鏈…

LeetCode 每日一題 2025/9/1-2025/9/7

記錄了初步解題思路 以及本地實現代碼&#xff1b;并不一定為最優 也希望大家能一起探討 一起進步 目錄9/1 1792. 最大平均通過率9/2 3025. 人員站位的方案數 I9/3 3027. 人員站位的方案數 II9/4 3516. 找到最近的人9/5 2749. 得到整數零需要執行的最少操作數9/6 3495. 使數組元…

小迪安全v2023學習筆記(八十講)—— 中間件安全WPS分析WeblogicJenkinsJettyCVE

文章目錄前記服務攻防——第八十天中間件安全&HW2023-WPS分析&Weblogic&Jetty&Jenkins&CVE應用WPS - HW2023-RCE&復現&上線CS介紹漏洞復現中間件 - Weblogic-CVE&反序列化&RCE介紹利用中間件 - Jenkins-CVE&RCE執行介紹漏洞復現CVE-20…

各webshell管理工具流量分析

哥斯拉哥斯拉是一個基于流量、HTTP全加密的webshell管理工具 特點 1.內置了3種Payload以及6種加密器&#xff0c;6種支持腳本后綴&#xff0c;20個內置插件 2.基于java&#xff0c;可以跨平臺使用 3.可以自己生成webshell&#xff0c;根據管理來生成一些payload&#xff0c;然后…

pytest(1):fixture從入門到精通

pytest&#xff08;1&#xff09;&#xff1a;fixture從入門到精通前言1. Fixture 是什么&#xff1f;為什么我們需要它&#xff1f;2. 快速上手&#xff1a;第一個 Fixture 與基本用法3. 作用域 (Scope)&#xff1a;控制 Fixture 的生命周期4. 資源管理&#xff1a;Setup/Tear…

Java17 LTS 新特性用例

基于 Java 17 LTS 的 實用示例 以下是基于 Java 17 LTS 的 30 個實用示例,涵蓋語言新特性、API 改進及常見場景。所有代碼均兼容 Java 17 語法規范。 文本塊(Text Blocks) String json = """{"name": "Java 17","type": &qu…

SpringBoot-Web開發-內容協商——多端內容適配內容協商原理HttpMessageConverter

其它篇章&#xff1a; 一&#xff1a;SpringBoot3-日志——日志原理&日志格式&日志級別&日志分組&文件輸出&文件歸檔&滾動切割 二&#xff1a;SpringBoot3-Web開發-靜態資源——WebMvcAutoConfiguration原理&資源映射&資源緩存&歡迎頁&…

Spring MVC 類型轉換與參數綁定:從架構到實戰

在 Spring MVC 開發中&#xff0c;“前端請求數據” 與 “后端 Java 對象” 的格式差異是高頻痛點 —— 比如前端傳的String類型日期&#xff08;2025-09-08&#xff09;要轉成后端的LocalDate&#xff0c;或者字符串male要轉成GenderEnum.MALE枚舉。Spring 并非通過零散工具解…

Spark提交任務的資源配置和優化

Spark 提交任務時主要可調的資源配置參數包括 Driver 資源&#xff08;內存、CPU&#xff09;、Executor 資源&#xff08;數量、內存、CPU&#xff09;以及 集群管理相關參數。配置和優化時一般結合集群硬件資源、數據規模、作業類型和作業復雜度&#xff08;SQL / 機器學習&a…

機器學習06——支持向量機(SVM核心思想與求解、核函數、軟間隔與正則化、支持向量回歸、核方法)

上一章&#xff1a;機器學習05——多分類學習與類別不平衡 下一章&#xff1a;機器學習07——貝葉斯分類器 機器學習實戰項目&#xff1a;【從 0 到 1 落地】機器學習實操項目目錄&#xff1a;覆蓋入門到進階&#xff0c;大學生就業 / 競賽必備 文章目錄一、間隔與支持向量&…

AI集群全鏈路監控:從GPU微架構指標到業務Metric關聯

點擊 “AladdinEdu&#xff0c;同學們用得起的【H卡】算力平臺”&#xff0c;H卡級別算力&#xff0c;80G大顯存&#xff0c;按量計費&#xff0c;靈活彈性&#xff0c;頂級配置&#xff0c;學生更享專屬優惠。 引言&#xff1a;AI算力時代的監控挑戰 隨著深度學習模型規模的指…