vs2003 局部友元訪問私有不可訪問_C++ 類:重載運算符與友元

d8b468e89669ef28e11168ecafbfb721.png

18.類中重載運算符與友元

上次節中學習了如何在類中重新定義賦值(=)運算符,實際上在一個自定義類中除了賦值(=)運算符外,類的對象是不可以直接使用運算符的,比如你在main函數中寫這樣的代碼會報錯:

257d9e55c890f0e3e80ffc05c71aa7cd.png

如果想解決這些報錯問題,需要在類中重載這些運算符。

18.1 重載

在表達式中使用

首先在類中聲明要重載的運算符:< ,然后去函數中實現具體的比較規則。

4ef5ce14f4b22037028d7c25200544d2.png

聲明重載運算符函數的代碼要求按照固定的格式:必須在運算符

18.2 重載+運算符

如同上面的

9d8dbe75ea1fa788dfa452756d4ec62f.png

18.3 重載<>運算符

之前我們可以使用C++ 的流提取運算符 >> 和流插入運算符 << 來輸入和輸出內置的一些數據類型,實際上我們也可以重載流提取運算符和流插入運算符來操作自定義的數據類型。

在這里,有一點很重要,我們需要把運算符重載函數聲明為類的友元函數,這樣我們就能不用創建對象而直接調用函數了。

fa358dd5a92d79d8ae832144d3300dc9.png
5630efda492f6c392f55eb774c2ce269.png

重載運算符之后,在main函數中直接通過cout輸出對象的數據,或cin輸入對象的數據。

d536b83fd856a8092679970b80e8ab26.png

18.4 友元函數

類的private的成員只有類的成員函數才有權直接訪問,外部函數無訪問權限。但是類中有一種特殊的函數——友元函數,有權訪問類的所有私有(private)成員和保護(protected)成員。盡管友元函數在類的定義中出現過,但友元函數并不是類的成員函數。

如果要聲明一個函數為類的友元函數,需要在類定義中使用關鍵字 friend,函數的參數必須有一個類對象參數,因為只有通過對象才能訪問私有或保護的成員:

3e36de0cd4f04af7d5fde6316ed8c7bc.png

18.5 友元類

友元也可以是一個類,該類被稱為友元類。如果聲明一個類為友元,那整個友元類的所有成員都是這個類的友元。

如果要聲明友元類,需要在類定義中使用關鍵字 friend,如下所示:

124973a2b55d2e4052665e9e0b6fed56.png

友元類的任何成員函數都可以訪問類的成員。

3cc4a4bbc02bb4055f73c9390fd157e4.png

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

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

相關文章

oracle sqlldr (一) 最基本語法

-- Create table create table DEPT2 (DEPTNO NUMBER(2) not null,DNAME VARCHAR2(14),LOC VARCHAR2(1000) ); alter table DEPT2add constraint DEPT_PK primary key (DEPTNO);------demo.ctl LOAD DATA INFILE * --數據在控制文件中 INTO TABLE DEPT2 INSERT ---默認加…

Django REST framework 視圖

上一部分代碼在序列化部分 類繼承順序 ############### mixins.py ################ # 類中調用的方法均在 GenericAPIView 類中實現&#xff0c;所以下列類需要結合 GenericAPIView 使用 class ListModelMixin(object) # 查看繼承類def list(self, reque…

AVS軟件解碼器的優化

AVS軟件解碼器的優化 董斌 , 姜昱明 (西安 電子科技大學計算機學院,陜西 西安,710071)) 摘 要: 主要研究了AVS標準的視頻壓縮部分,指出了影響解碼速度的瓶頸并提出了一種優化方案.使用從程序結構入手結合使用SIMD指令集的方案來優化AVS軟件解碼器.實驗結果表明優化方案可行并且…

IOS7.1.1真的像網上流傳的那么好?沒有任何問題么??

IOS7.1.1推送更新之后到處看到網上說711好的~~ 那么IOS7.1.1真的像網上現在流傳的那么好么&#xff1f; 其實不然&#xff0c;IOS7.1.1目前眾多網友反映說升級ios7.1.1之后APPstore連接不上了&#xff0c;提示無法連接到APPstore。 這個問題也不難解決~還是之前的老辦法~ 那么今…

三校生計算機對口本科有哪些學校,寶山三校生五月對口高考報名

多次復習生活不可能像你想象得那么好&#xff0c;但也不會像你想象得那么糟。我覺得人的脆弱和堅強都超乎自己的想象。多種方式結合起來復習單一的復習方法&#xff0c;易產生消極情緒和疲勞&#xff0c;如果采用交談復習法、討論復習法、自我檢查復習法多樣化的復習方法&#…

localhost 已拒絕連接_【Python】MongoDB數據庫的連接和操作

安裝Python 要連接 MongoDB 需要 MongoDB 驅動。pip安裝&#xff1a;python3 -m pip3 install pymongo創建數據庫import pymongo myclient pymongo.MongoClient("mongodb://localhost:27017/")mydb myclient["loaderman"]注意: 在 MongoDB 中&#xff0c…

checkbox已設置為checked--true-但不勾選問題解決方法(只第一次勾選有效)

一、出現的問題及解決方法&#xff1a; 今天在寫一個table相關插件的時候無意中發現了這樣一個問題&#xff0c;記得以前在寫這種控制checkbox選中與非選中的代碼時并沒有這種bug&#xff0c;當時也是用的checked屬性&#xff0c;而現在卻行不通了。 于是乎做了以下測試&#x…

Python 錯誤和異常小結[轉]

原文鏈接 http://blog.csdn.net/sinchb/article/details/8392827 事先說明哦&#xff0c;這不是一篇關于Python異常的全面介紹的文章&#xff0c;這只是在學習Python異常后的一篇筆記式的記錄和小結性質的文章。什么&#xff1f;你還不知道什么是異常&#xff0c;額... 1.Py…

Django REST framework 認證、權限和頻率組件

認證與權限頻率組件 身份驗證是將傳入請求與一組標識憑據&#xff08;例如請求來自的用戶或其簽名的令牌&#xff09;相關聯的機制。然后 權限 和 限制 組件決定是否拒絕這個請求。 簡單來說就是&#xff1a; 認證確定了你是誰權限確定你能不能訪問某個接口限制確定你訪問某…

高速率AVS整數變換的匯編實現與優化

1 引言 AVS標準Ⅲ采用的8x8整數變換在獲得較H&#xff0e;264更高的壓縮率和主觀圖像質量的同時&#xff0c;增加了算法的實現復雜性和時間開銷。本文重點研究AVS編解碼器的整數變換模塊&#xff0c;針對不同的算法實現模式&#xff0c;在原有Visual C6&#xff0e;0整數變換模…

計算機與廣播電視論文,淺談廣播電視中計算機技術的作用論文.pdf

1、計算機技術在廣播電視的媒體內容中有重要應用在以往的廣播電視中&#xff0c; 媒體內容主要分為音頻和視頻兩種信號&#xff0c; 在傳輸的過程中使用的是模擬信號&#xff0c; 但模擬信號受到的外界干擾因素較為明顯&#xff0c; 因此廣播電視傳播的媒體內容受到影響&#x…

opencv安裝教程python3.7_Mac下安裝使用Python-OpenCV,解決opencv3安裝完成無法使用的問題 - pytorch中文網...

OpenCV是一個跨平臺計算機視覺庫&#xff0c;可以運行在Linux、Windows、Android和Mac OS操作系統上。提供了Python、Ruby、MATLAB等語言的接口&#xff0c;實現了圖像處理和計算機視覺方面的很多通用算法。 Mac安裝OpenCV 在我們的深度學習的過程中&#xff0c;對于圖像&#…

NodeJS在CentOs7下安裝

node下載地址:https://nodejs.org/en/download/ 1.安裝gcc $ yum install gcc-c 2.解壓最新版本 $ mkdir /usr/local/node$ tar zxvf node-v6.11.4.tar.gz $ cd node-v6.11.4$ ./configure --prefix/usr/local/node# 在當前目錄下編譯安裝Node$ make$ make install 3.驗證安裝 …

Python功能之反射

有如下文件: index.py 1<span style"font-family:宋體, SimSun;">#!/usr/bin/env python<br data-filtered"filtered"># -*- coding:utf-8 -*-<br data-filtered"filtered">__author__ ryan<br data-filtered"filter…

Django REST framework 分頁

分頁模式 rest framework中提供了三種分頁模式&#xff1a; from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination, CursorPagination 全局配置 REST_FRAMEWORK {DEFAULT_PAGINATION_CLASS: rest_framework.pagination.LimitOffsetPaginat…

解析H.264視頻編解碼DSP實現與優化

引言 基于互聯網的數字視頻產業前景看好&#xff0c;而3G的規模部署&#xff0c;也會推動移動視頻通信成為現實。但數字化后的視頻圖像具有數據海量性&#xff0c;給圖像的存儲和傳輸造成較大的困難。數字視頻產業&#xff0c;是指數字內容中以數字視頻形態為主的文化創意和傳播…

ap計算機科學a買什么書,準備AP*計算機科學A考試-第1部分

你將學到什么Identify the use and proper use of Variables, Conditionals, Objects and primitives, control structures, booleans, lists and arrays, and Exceptions.Implement problem descriptions in well designed code.Identify and begin to design algorithms to s…

python 打包exe_python如何封裝為exe

1、首先進入python安裝路徑D:\Python27\Scripts下&#xff0c;查看pip或easy_install是否安裝。2、確保安裝了pip或者easy_install&#xff0c;在cmd命令行下輸入“easy_install”&#xff0c;沒有提示“xxx不是內部或外部命令……”&#xff0c;就說明easy install工具安裝成功…

CentOS7安裝Hadoop2.7完整步驟

總體思路&#xff0c;準備主從服務器&#xff0c;配置主服務器可以無密碼SSH登錄從服務器&#xff0c;解壓安裝JDK&#xff0c;解壓安裝Hadoop&#xff0c;配置hdfs、mapreduce等主從關系。 1、環境&#xff0c;3臺CentOS7&#xff0c;64位&#xff0c;Hadoop2.7需要64位Linux&…

Django REST framework 解析器和渲染器

解析器的作用 解析器的作用就是服務端接收客戶端傳過來的數據&#xff0c;把數據解析成自己可以處理的數據。本質就是對請求體中的數據進行解析。 在了解解析器之前&#xff0c;我們要先知道Accept以及ContentType請求頭。 Accept是告訴對方我能解析什么樣的數據&#xff0c…