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

歡迎訪問 生活随笔!

生活随笔

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

c/c++

C++ Primer 5th笔记(chap 14 重载运算和类型转换)算术和关系运算符

發布時間:2025/3/21 c/c++ 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ Primer 5th笔记(chap 14 重载运算和类型转换)算术和关系运算符 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
運算符
雙目算術運算符+ (加),-(減),*(乘),/(除),% (取模)
關系運算符==(等于),!= (不等于),< (小于),> (大于>,<=(小于等于),>=(大于等于)
  • 通常情況下,算術和關系運算符應該定義為非成員函數,以便兩側的運算對象進行轉換。
  • 由于這些運算符一般不會改變運算對象的狀態,所以形參都是常量引用。
  • 如果類同時定義了算數運算符和相關的復合賦值運算符,則通常情況下應該使用復合賦值來實現算數運算符。

1. 算術運算符

通常會計算它的兩個運算對象并得到一個新值,這個值通常存儲在一個局部變量內,操作完成后返回該局部變量的副本作為結果(返回類型建議設置為原對象的const類型)。

Sales_data operator +(const Sales_data &lhs,const Sales_data &rhs) {Sales_data sum = lhs;sum += rhs;return sum; }

2. 相等運算符(Equality Operators)

設計準則:

  • 如果類在邏輯上有相等性的含義,則應該定義operator==而非一個普通的命名函數。這樣做便于使用標準庫容器和算法,也更容易記憶。
  • 通常情況下,operator==應該具有傳遞性。
  • 如果類定義了operator==,則也應該定義operator!=。
  • operator==和operator!=中的一個應該把具體工作委托給另一個。
bool operator==(const Sales_data &lhs, const Sales_data &rhs) {return lhs.isbn() == rhs.isbn() &&lhs.units_sold == rhs.units_sold &&lhs.revenue == rhs.revenue; }bool operator!=(const Sales_data &lhs, const Sales_data &rhs) {return !(lhs == rhs); }

3. 賦值運算符

  • 不論形參的類型是什么,賦值運算符運算符都必須定義為成員函數,復合賦值運算符也通常如此。
  • 兩類運算符都應該返回左側運算對象的引用(賦值運算符和復合賦值運算符)。
  • 可以使用別的類型作為右側運算對象
//重載賦值運算符 StrVec &StrVec::operator=(initializer_list<string> il) {//alloc_copy分配內存空間,并從給定安慰內拷貝元素auto data=alloc_n_copy(il.begin(),il.end());free(); // 銷毀對象中的元素并釋放內存空間elements=data.frist;//更新數據成員,使其指向新空間first_free=cap=data.second; return *this; } //復合賦值運算符 // member binary operator: left-hand operand is bound to the implicit this pointer // assumes that both objects refer to the same book Sales_data& Sales_data::operator+=(const Sales_data &rhs) {units_sold += rhs.units_sold;revenue += rhs.revenue;return *this; }

4. 關系運算符(Relational Operators)

定義順序關系。 eg. 關聯容器中用到的小于運算符

  • 如果某個類在邏輯上有相等性的含義,則該類應該定義operator==。
  • 定義了相等運算符的類通常也會定義關系運算符。
  • 如果類定義了operator==,則關系運算符的定義應該與operator==保持一致。特別是,如果兩個對象是不相等的,那么其中一個對象應該小于另一個對象。
  • 如果存在唯一一種可靠的<定義,則應該考慮為這個類定義<運算符。如果類同時還包含==,則當且僅當<的定義和==產生的結果一致時才定義<運算符。
//重載復合賦值運算符 StrVec &StrVec::operator+=(initializer_list<string> il) {unit_sold+=rhs.units_sold;revenue+=rhs.revenue;return *this; }

總結

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

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