類和對象【六】友元和內部類

文章目錄

  • 友元
    • 友元的作用
    • 友元的缺點
    • 友元函數
      • 語法:
      • 特點:
    • 友元類
      • 語法:
      • 特點:
  • 內部類
    • 概念
    • 特點

友元

友元的作用

友元提供了一種打破封裝的方式,有時提供了便利。

友元的主要作用就是打破封裝

即可以讓一個類的友元函數/友元類可以直接訪問和修改這個類的私有(private)和被保護(protected)成員


友元的缺點

  1. 安全性降低:友元可以不受限制地訪問類的所有成員,這可能導致數據的不安全暴露。
  2. 封裝性受損:盡管友元不是類的成員,但它的存在使得類的封裝性受到破壞,因為非友元函數或類無法直接訪問某類中的私有成員和被保護成員。

在實際編程中,應謹慎使用友元機制,避免因為封裝性的破壞安全性的降低而導致程序的不穩定和難以維護。

友元應當只在沒有其他更好的解決方案時才被考慮使用。


友元函數

語法:

在類中的任何一個訪問限定符下增加一句聲明:
friend(關鍵字) 全局的函數聲明

即可讓這個全局函數成為該類的友元函數

在這里插入圖片描述
在這里插入圖片描述

特點:

  1. 友元函數可訪問類的私有和保護成員,但不是類的成員函數

  2. 友元函數不能用const修飾,因為const修飾函數的時候修飾的是this指針,只有類的成員函數才有this指針

  3. 友元函數的調用與普通函數的調用原理相同

  4. 一個函數可以是多個類的友元函數


友元類

如果類B是類A的友元類,那就可以在類B的作用域中【類B的成員函數的作用域也是類B的作用域】直接訪問類A的成員

在這里插入圖片描述
在這里插入圖片描述


語法:

在類中的任何一個訪問限定符下增加一句聲明:
friend(關鍵字) 友元類的聲明


特點:

  1. 友元關系是單向的,不具有交換性
    比如上面的事例中類B是類A的友元類,B就可以訪問A中的私有和保護成員,但是A卻不能訪問B中的私有和保護成員,因為B并沒有聲明A是B的友元類【突然有點可悲是怎么回事?即A把B當做朋友,為B掏心掏肺,但B可能認為A什么都不是】
    在這里插入圖片描述

  2. 友元關系不能繼承【這個可以形象的理解為爸爸的朋友并不一定是兒子的朋友】

  3. 友元關系不能傳遞【我朋友的朋友也不一定是我的朋友】
    例:類C是類B的友元類,類B是類A的友元類,但類C不是類A的友元類


內部類

概念

如果一個類定義在另一個類的內部,這個內部類就叫做內部類。
內部類是一個獨立的類,它不屬于外部類,更不能通過外部類的對象去訪問內部類的成員。

類比一下:
普通類是在命名空間域/全局域中定義的,但是普通類還是有一個自己的獨立的類域,在類域之外的統一為外部,外部不可直接訪問類中的私有和保護成員

內部類就是在另一個類的作用域中的定義的,所以內部類的類域之外的也統一是外部


特點

  1. 內部類是定義在一個類的類域里面的,而訪問類域里面的東西必須指定類域【和命名空間類似】
    所以要在外部類之外使用內部類時,要用外部類+::先找到內部類
    在這里插入圖片描述

  2. 內部類在外部類的類域里,在類域里的東西都受訪問限定符的限制,內部類也不例外
    在這里插入圖片描述

  3. 內部類是外部類的友元類,內部類可以通過外部類的對象參數來訪問外部類中的所有成員【包括私有和被保護成員】,但是外部類不是內部類的友元
    在這里插入圖片描述

  4. 內部類可以直接訪問外部類中的static成員不需要外部類的對象/類名

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

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

相關文章

爬蟲100個Python例子優化

今天看到一個Python 100例的在線資源,感覺每個都需要去點,太費時間了,于是,使用Python將數據爬取下來,方便查看。實際效果如下: 。。。。。。 用了13分鐘,當然,這是優化后的效果,如果沒有優化,需要的時間更長。 爬取url如下: https://www.runoob.com/python/pytho…

Vue小程序項目知識積累(三)

1.CSS中的var( ) var() 函數用于插入自定義屬性(也稱為CSS變量)的值。 var(--main-bg-color,20rpx) 設置一個CSS變量的值,但是如果 --main-bg-color 變量不存在,它將默認返回 20rpx。 CSS變量必須在一個有效的CSS規則&#xf…

uniapp+vue3+ts開發小程序或者app架構時候的UI框架選型

使用vue3tsviteuniapp開發小程序或者跨平臺app的趨勢越來越高,有一個順手的UI的框架還是非常重要的,官方維護的 uni-ui,支持全端,而且有類型提示,目前已經內置到 GitHub - Sjj1024/uniapp-vue3: 使用uniapp和vue3 ts …

搭建CMS系統

搭建CMS系統 1 介紹 內容管理系統(Content Management System,CMS)是一種用于管理、發布和修改網站內容的系統。開源的CMS系統有WordPress、帝國CMS等,國產的Halo很不錯。 WordPress參考地址 # 官網 https://wordpress.org/# …

為什么IP地址需要劃分為公有和私有地址?

一.知識點的解釋 1.在現在的網絡中,IP地址分為公網IP地址和私有IP地址。公網IP是在Internet使用的IP地址,而私有IP地址則是在局域網中使用的IP地址。 2.私有IP地址是一段保留的IP地址。只使用在局域網中,無法在Internet上使用。 二.為什么…

Python腳本必加代碼:99%的程序員都忽視了這個細節!

文章目錄 一、初識 if __name__ __main__二、__name__ 和 __main__ 是什么?三、實戰講解四、實際應用場景測試代碼提高代碼可重用性避免不必要的執行 五、深入理解和更多用法使用 argparse 解析命令行參數使用 unittest 進行單元測試使用 multiprocessing 創建子進…

c#入門學習筆記

p35 字符串 在字符串之前加上一個,可以保持原生字符,不用再進行轉義(除了雙引號)。 例如: "A short list: item 1 item 2"或者: "C:\Temp\MyDir\MyFile.doc"這相當于"C:\\Tem…

網盤攻略,羊毛薅到底,這4招太狠了

僅供參考 先買原石會員賬戶,再綁手機。 自己手機千萬不要去注冊115,先去馬云家買原石會員帳戶(五十多自帶33T永久空間,非常實惠)。買完原石帳戶后再用手機登錄綁定帳戶和修改密碼。買8T永久空間8年VIP 然后再花560元買8T永久空間8年vip&…

嵌入式全棧開發學習筆記---C語言筆試復習大全22

目錄 結構體 結構體的聲明 定義結構體變量 訪問結構體成員進行初始化 通過結構體變量名訪問結構體成員 結構體指針 結構體指針的定義 通過結構體指針訪問結構體成員 結構體數組 結構體數組的定義 遍歷結構體數組 結構體的長度(筆試重點) 上一…

深入理解C++多態-虛函數

引言 C多態的實現方式可以分為靜態多態和動態多態,其中靜態多態主要有函數重裝和模板兩種方式,動態多態就是虛函數。下面我們將通過解答以下幾個問題的方式來深入理解虛函數的原理: 為什么要引入虛函數?(用來解決什么…

2024年最新信息安全標準匯總

這些標準是我們在數字化時代保障網絡安全、數據安全的重要基石,對于維護國家安全、企業利益和個人信息安全具有至關重要的作用。 隨著科技的快速發展,網絡空間的安全威脅也在不斷演變,從復雜的網絡攻擊到個人信息泄露,這些安全風…

JAVA面試題大全(十四)

1、Kafka 可以脫離 Zookeeper 單獨使用嗎?為什么? kafka不能脫離zookper單獨使用,因為kafka使用zookper管理和協調kafka的節點服務器。 2、Kafka 有幾種數據保留的策略? Kafka提供了多種數據保留策略,這些策略用于定…

哈希雙指針

文章目錄 一、哈希1.1兩數之和1.2字母異位詞分組1.3最長子序列 二、雙指針2.1[移動零](https://leetcode.cn/problems/move-zeroes/description/?envTypestudy-plan-v2&envIdtop-100-liked)2.2[盛最多水的容器](https://leetcode.cn/problems/container-with-most-water/d…

嵌入式0基礎開始學習 ⅠC語言(7)指針

0.問題引入 int a 5; a 1024; //把1024存放到變量a的地址中去 b a; // 取變量a的值,賦值給b >在c語言中,任何一個變量,都有兩層含義 (1)代表變量的存儲單元的地址:變量的地址…

藍橋樓賽第30期-Python-第三天賽題 統計學習數據題解

樓賽 第30期 Python 模塊大比拼 統計學習數據 介紹 JSON(JavaScript Object Notation, /?d?e?s?n/)是一種輕量級的數據交換格式,最初是作為 JavaScript 的子集被發明的,但目前已獨立于編程語言之外,成為了通用的…

分享10個國內可以使用的GPT中文網站

在今天的人工智能領域,基于對話的語言模型已成為研究的熱點,尤其是像 ChatGPT 這樣因其出色的語言理解與對話交互能力而廣受關注的模型。本文將介紹10個國內可以直接使用GPT的網站,旨在為大家在選擇和使用這些優秀的AI工具時提供有價值的參考…

使用pyqt繪制一個愛心!

使用pyqt繪制一個愛心! 介紹效果代碼 介紹 使用pyqt繪制一個愛心! 效果 代碼 import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget from PyQt5.QtGui import QPainter, QPen, QBrush, QColor from PyQt5.QtCore import Qt, Q…

[保姆式教程]使用目標檢測模型YOLO V8 OBB進行旋轉目標的檢測:訓練自己的數據集(基于衛星和無人機的農業大棚數據集)

最近需要做基于衛星和無人機的農業大棚的旋轉目標檢測,基于YOLO V8 OBB的原因是因為嘗試的第二個模型就是YOLO V8,后面會基于YOLO V9模型做農業大棚的旋轉目標檢測。YOLO V9目前還不能進行旋轉目標的檢測,需要修改代碼 PS:歡迎大家分享農業大…

【研發日記】Matlab/Simulink技能解鎖(九)——基于嵌入式處理器仿真

文章目錄 前言 基于嵌入式處理器仿真 使用方式 第一步,硬件連接 第二步,配置硬件資源 第三步,配置XCP協議 第四步,加載Contrl Model 第五步,運行仿真 第六步,仿真報告 分析和應用 總結 參考資料 前言…

無線技術整合到主動噪聲控制(ANC)增強噪聲降低性能

主動噪聲控制(ANC)已成為一種廣泛使用的降噪技術。基本原理是通過產生與外界噪音相等的反向聲波,將噪音中和,從而達到降噪的效果。ANC系統通常包括以下幾個部分:參考麥克風、處理芯片、揚聲器和誤差麥克風。參考麥克風…