重載一元運算符

自增++運算符

#include<iostream>
using namespace std;
class CGirl
{
public:string name;int ranking;CGirl() { name = "zhongge"; ranking = 5; }void show() const{ cout << "name : "<<name << " , ranking : " << ranking; }};
int main() {CGirl g1;g1.show();return 0;
}

現在我們重載一個++運算符

#include<iostream>
using namespace std;
class CGirl
{
public:string name;int ranking;CGirl() { name = "zhongge"; ranking = 5; }void show() const{ cout << "name : "<<name << " , ranking : " << ranking; }void operator++() {ranking++;}};
int main() {CGirl g1;++g1;g1.show();return 0;
}

main函數里的g1++不行但是++g1就行了;

然而你++(++g)不行,你讓你重載函數返回對象的引用就可以了;

#include<iostream>
using namespace std;
class CGirl
{
public:string name;int ranking;CGirl() { name = "zhongge"; ranking = 5; }void show() const{ cout << "name : "<<name << " , ranking : " << ranking; }CGirl & operator++() {ranking++;return *this;}};
int main() {CGirl g1;++(++g1);g1.show();return 0;
}

上面這是自增運算符的前置,我們再來個后置的;

c++規定重載自增&自減運算符,如果重載函數有一個int形參,編譯器處理后置表達式時將調用這個重載函數。

#include<iostream>
using namespace std;
class CGirl
{
public:string name;int ranking;CGirl() { name = "zhongge"; ranking = 5; }void show() const{ cout << "name : "<<name << " , ranking : " << ranking; }CGirl & operator++(int ) {ranking++;return *this;}};
int main() {CGirl g1;g1++;g1.show();return 0;
}

這樣就ok了;

-----------------------------------------------------------------------------------------------------------------------

整數的話不可以后自增嵌套,前自增嵌套可以;

#include<iostream>
using namespace std;
class CGirl
{
public:string name;int ranking;CGirl() { name = "zhongge"; ranking = 5; }void show() const{ cout << "name : "<<name << " , ranking : " << ranking; }CGirl& operator++(int ) {ranking++;return *this;}};
int main() {CGirl g1,g2;g2=g1++;g2.show();g1.show();return 0;
}

name : zhongge , ranking : 6name : zhongge , ranking : 6
C:\Users\33007\source\repos\ConsoleApplication8\x64\Debug\ConsoleApplication8.exe (進程 9820)已退出,代碼為 0。
按任意鍵關閉此窗口. . .

顯然你g1++是后來加,g2應該是g1之前的值而不是增后的值。

所以改一下后++的代碼;

CGirl operator++(int ) {CGirl tmp = *this;ranking++;return tmp;
}

?函數的返回值不能是引用,成員函數的臨時對象不能引用;

name : zhongge , ranking : 5name : zhongge , ranking : 6
C:\Users\33007\source\repos\ConsoleApplication8\x64\Debug\ConsoleApplication8.exe (進程 15512)已退出,代碼為 0。
按任意鍵關閉此窗口. . .

這樣功能就對上了;

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

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

相關文章

cmake編譯源碼教程(一)

1、介紹 本次博客介紹使用cmake編譯平面點云分割的源代碼,其對室內點云以及TLS點云中平面結構進行分割,分割效果如下: 2、編譯過程 2.1 源代碼下載 首先,下載源代碼,如下所示,在該文件夾下新建一個build文件夾,用于后續生成sln工程。 同時,由于該庫依賴open…

自動化設備上位機設計 二

目錄 一 設計原型 二 后臺代碼 一 設計原型 二 后臺代碼 namespace 自動化上位機設計 {public partial class Form1 : Form{public Form1(){InitializeComponent();timer1.Enabled true;timer1.Tick Timer1_Tick;}private void Timer1_Tick(object? sender, EventArgs e)…

您的私人辦公室!-----ONLYOFFICE8.1版本的桌面編輯器測評

隨時隨地創建并編輯文檔&#xff0c;還可就其進行協作 ONLYOFFICE 文檔是一款強大的在線編輯器&#xff0c;為您使用的平臺提供文本文檔、電子表格、演示文稿、表單和 PDF 編輯工具。 網頁地址鏈接&#xff1a; https://www.onlyoffice.com/zh/office-suite.aspxhttps://www…

AJAX-day1:

注&#xff1a;文件布局&#xff1a; 一、AJAX的概念&#xff1a; AJAX是瀏覽器與服務器進行數據通信的技術 >把數據變活 二、AJAX的使用&#xff1a; 使用axios庫&#xff0c;與服務器進行數據通信 基于XMLHttpRequest封裝&#xff0c;代碼簡單 Vue,React項目使用 學習…

自定義控件繪圖篇(一)基本幾何圖形繪制

在Android開發中&#xff0c;自定義控件是一種強大的技術&#xff0c;它允許開發者創建具有獨特外觀和行為的UI組件。通過自定義控件&#xff0c;你可以實現標準組件庫中沒有的功能和設計。自定義控件通常涉及兩個主要方面&#xff1a;布局和繪圖。本回答將重點介紹如何在自定義…

哪個品牌的加密軟件穩定方便使用?

一、什么是企業加密軟件&#xff1f; 企業加密軟件是一種用于保護企業內部數據安全的工具。在數字化時代&#xff0c;隨著數據量的爆炸式增長&#xff0c;信息安全和隱私保護變得愈發重要。企業加密軟件作為保障數據安全的關鍵工具&#xff0c;受到越來越多用戶的青睞。 企業…

昆蟲學(書籍學習資料)

包括昆蟲分類&#xff08;上下冊&#xff09;、昆蟲生態大圖鑒等書籍資料。

調和均值

文章目錄 調和均值的定義和公式調和均值的幾何解釋調和均值的應用調和均值與算術平均和幾何平均的比較示例 調和均值的定義和公式 調和均值是一種特殊的平均數&#xff0c;適用于處理涉及比率或速度的數據。對于一組正數 x 1 , x 2 , … , x n x_1, x_2, \ldots, x_n x1?,x2…

Java中的AQS

Java中的AbstractQueuedSynchronizer&#xff08;AQS&#xff09;是Java并發框架的核心組件之一&#xff0c;它位于java.util.concurrent.locks包下。AQS為Java的鎖和其他同步工具提供了基礎架構&#xff0c;它使用模板設計模式和一種稱為“CLH鎖”的算法來實現高效的線程同步。…

如何使用 SwiftUI 構建 visionOS 應用

文章目錄 前言WindowsVolumes沉浸式空間結論 前言 Apple Vision Pro 即將推出&#xff0c;現在是看看 SwiftUI API 的完美時機&#xff0c;這使我們能夠將我們的應用程序適應 visionOS 提供的沉浸式世界。蘋果表示&#xff0c;構建應用程序的最佳方式是使用 Swift 和 SwiftUI。…

2024年軟件測試崗必問的100+個面試題【含答案】

一、基礎理論 1、開場介紹 介紹要領&#xff1a;個人基本信息、工作經歷、之前所做過的工作及個人專長或者技能優勢。揚長避短&#xff0c;一定要口語化&#xff0c;語速適中。溝通好的就多說幾句&#xff0c;溝通不好的話就盡量少說兩句。舉例如下&#xff1a; 面試官你好&…

Java中Predicate(謂詞),方法引用,以及正則的一些講解

1.Predicate接口簡述 FunctionalInterface public interface Predicate<T> {boolean test(T t);default Predicate<T> and(Predicate<? super T> other) {Objects.requireNonNull(other);return (t) -> test(t) && other.test(t);}default Pred…

速盾:cdn加速效果

CDN&#xff08;Content Delivery Network&#xff09;即內容分發網絡&#xff0c;是一種通過在全球多個節點服務器上緩存網站的靜態資源&#xff0c;并將用戶請求導向離用戶最近的服務器節點&#xff0c;從而提供更快速的訪問體驗的技術。 在傳統的網絡架構中&#xff0c;用戶…

鴻蒙 HarmonyOs 網絡請求 快速入門

官方文檔&#xff1a; ArkUI簡介-ArkUI&#xff08;方舟UI框架&#xff09;-應用框架 | 華為開發者聯盟 (huawei.com) 一、通過原有的http組件進行網絡請求&#xff08;方式一&#xff09; 1.1 HttpRequestOptions的操作 名稱類型描述methodRequestMethod請求方式&#xff…

12款超良心好用APP推薦,每一款都值得下載!

AI視頻生成&#xff1a;小說文案智能分鏡智能識別角色和場景批量Ai繪圖自動配音添加音樂一鍵合成視頻https://aitools.jurilu.com/分享是奉獻的果實&#xff0c;分享是快樂的前提。每天給小伙伴們分享自己認可的軟件&#xff0c;也是莫大的幸福&#xff0c;今天獲得12款好用的軟…

class類和style內聯樣式的綁定

這里的綁定其實就是v-bind的綁定&#xff0c;如代碼所示&#xff0c;div后面的引號就是v-bind綁定&#xff0c;然后大括號將整個對象括起來&#xff0c;對象內先是屬性&#xff0c;屬性后接的是變量&#xff0c;這個變量是定義在script中的&#xff0c;后通過這個變量&#xff…

flutter:監聽路由的變化

問題 當從路由B頁面返回路由A頁面后&#xff0c;A頁面需要進行數據刷新。因此需要監聽路由變化 解決 使用RouteObserver進行錄音監聽 創建全局變量&#xff0c;不在任何類中 final RouteObserver<PageRoute> routeObserver RouteObserver<PageRoute>();在mai…

flask-apscheduler 定時任務被執行兩次

定時任務沒有被多次調用&#xff0c;事實上如果多次調用的話&#xff0c;flask-apscheduler會拋出異常。 但一開始任務還是按時執行一次&#xff0c;重啟flask或者修改部分代碼后&#xff0c;就發送定時任務一次執行兩次了。 之所以會發生這種情況&#xff0c;是因為在debug模…

面試-微服務篇

springcloud組件有哪些&#xff1f; eureka、ribbon負載均衡、feign、hystrix、zuul/gateway網關 nacos、ribbon、feign、sentinel、gateway 服務注冊和發現是什么意思&#xff1f;springcloud如何實現服務注冊發現&#xff1f; 微服務中必須要使用的組件&#xff0c;考察我們使…

LeetCode刷題記錄:(15)三角形最小路徑和

知識點&#xff1a;倒敘的動態規劃 題目傳送 解法一&#xff1a;二維動態規劃【容易理解】 class Solution {public int minimumTotal(List<List<Integer>> triangle) {int n triangle.size();if (n 1) {return triangle.get(0).get(0);}// dp[i][j]:走到第i層第…