日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ Primer 5th笔记(chap 14 重载运算和类型转换)重载运算概述

發布時間:2025/3/21 c/c++ 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ Primer 5th笔记(chap 14 重载运算和类型转换)重载运算概述 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 定義

重載運算是具有特殊名字的函數,它們的名字由關鍵字operator和其后要定義的運算符號組成。

2. 運算符表

2.1 可重載運算符

運算符類型運算符種類
雙目算術運算符+ (加),-(減),*(乘),/(除),% (取模)
關系運算符==(等于),!= (不等于),< (小于),> (大于>,<=(小于等于),>=(大于等于)
邏輯運算符//(邏輯或),&&(邏輯與),!(邏輯非)
單目運算符+ (正),-(負),*(指針),&(取地址)
自增自減運算符++(自增),–(自減)
位運算符/ (按位或),& (按位與),~(按位取反),^(按位異或),,<< (左移),>>(右移)
賦值運算符=, +=, -=, *=, /= , % = , &=, /(其實是豎著的)=, ^=, <<=, >>=
空間申請與釋放new, delete, new[ ] , delete[]
其他運算符()(函數調用),->(成員訪問),,(逗號),

2.2 不可重載的運算符列表

運算符含義
.成員訪問運算符
., ->成員指針訪問運算符
::域運算符
sizeof長度運算符
?:條件運算符
#預處理符號

3. 重載運算符的設計規則

規則1

  • 不能改變內置類型的運算符的含義。
  • 只能重載已有的運算符,而不能發明新的運算符號。
  • 重載運算符的優先級和結合律跟對應的內置運算符保持一致。

規則2

  • 通常情況下,不應該重載逗號,、取地址&、邏輯與&&和邏輯或||運算符。
  • 如果類中含有算術運算符或位運算符,則最好也提供對應的復合賦值運算符。
  • 如何有==,一般會有!=
  • 如果有單序比較,則應該有operator<,同時也應該有> 和其他的。
  • 邏輯運算符返回bool,算術運算符返回類類型,賦值運算符和復合賦值運算符返回左側運算對象的一個引用

4. 重載運算符的參數

參數表示運算符的運算對象,對于二元運算符來說,左側運算對象傳遞給第一個參數,右側運算對象傳遞給第二個參數。

eg.

data1 + data2 operator+(data1, data2); data1 += data2; // expression-based ''call'' data1.operator+=(data2); // equivalent call to a member operator function
  • 除了重載的函數調用運算符operator()之外,其他重載運算符不能含有默認實參。
  • 重載運算符函數的參數數量和該運算符作用的運算對象數量一樣多。
  • 成員運算符函數的顯式參數數量比運算對象的數量少一個。

5. 設計為成員函數還是普通函數

  • 把運算符定義為成員函數時,它的左側運算對象必須是運算符所屬類型的對象。
  • 如果一個運算符函數是類的成員函數,則它的第一個運算對象會綁定到隱式的this指針上。
string s = "world"; string t = s + "!"; // ok: we can add a const char* to a string string u = "hi" + s; // would be an error if + were a member of string

如何選擇將運算符定義為成員函數還是普通函數:

  • 賦值=、下標[]、調用()和成員訪問箭頭->運算符必須是成員函數。
  • 復合賦值運算符一般是成員函數,但并非必須。
  • 改變對象狀態或者與給定類型密切相關的運算符,如遞增、遞減、解引用運算符,通常是成員函數。
  • 具有對稱性的運算符可能轉換任意一端的運算對象,如算術、相等性、關系和位運算符,通常是普通函數。

總結

以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 14 重载运算和类型转换)重载运算概述的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。