• 2023.10.10


    运算符重载

    类外函数实现:

    1. #include
    2. using namespace std;
    3. class Good
    4. {
    5. //算数
    6. friend const Good operator*(const Good &L,const Good &R);
    7. friend const Good operator+(const Good &L,const Good &R);
    8. friend const Good operator/(const Good &L,const Good &R);
    9. friend const Good operator-(const Good &L,const Good &R);
    10. friend const Good operator%(const Good &L,const Good &R);
    11. //关系
    12. friend bool operator>(const Good &L,const Good &R);
    13. friend bool operator>=(const Good &L,const Good &R);
    14. friend bool operator<(const Good &L,const Good &R);
    15. friend bool operator<=(const Good &L,const Good &R);
    16. friend bool operator==(const Good &L,const Good &R);
    17. //赋值
    18. friend Good &operator-=(Good &L,const Good &R);
    19. friend Good &operator+=(Good &L,const Good &R);
    20. friend Good &operator*=(Good &L,const Good &R);
    21. friend Good &operator/=(Good &L,const Good &R);
    22. friend Good &operator%=(Good &L,const Good &R);
    23. private:
    24. int n;
    25. int f;
    26. int a;
    27. public:
    28. Good(){}
    29. Good(int n,int f,int a):n(n),f(f),a(a){}
    30. void show() const
    31. {
    32. cout << "n:" << n << endl;
    33. cout << "f:" << f << endl;
    34. cout << "a:" << a << endl;
    35. //cout << "常" << endl;
    36. }
    37. };
    38. //非成员
    39. //算数+
    40. const Good operator+(const Good &L,const Good &R)
    41. {
    42. Good t;
    43. t.a=L.a+R.a;
    44. t.n=L.n+R.n;
    45. t.f=L.f+R.f;
    46. return t;
    47. }
    48. //算数*
    49. const Good operator*(const Good &L,const Good &R)
    50. {
    51. Good t;
    52. t.a=L.a*R.a;
    53. t.n=L.n*R.n;
    54. t.f=L.f*R.f;
    55. return t;
    56. }
    57. //算数-
    58. const Good operator-(const Good &L,const Good &R)
    59. {
    60. Good t;
    61. t.a=L.a-R.a;
    62. t.n=L.n-R.n;
    63. t.f=L.f-R.f;
    64. return t;
    65. }
    66. //算数/
    67. const Good operator/(const Good &L,const Good &R)
    68. {
    69. Good t;
    70. t.a=L.a/R.a;
    71. t.n=L.n/R.n;
    72. t.f=L.f/R.f;
    73. return t;
    74. }
    75. //算数%
    76. const Good operator%(const Good &L,const Good &R)
    77. {
    78. Good t;
    79. t.a=L.a%R.a;
    80. t.n=L.n%R.n;
    81. t.f=L.f%R.f;
    82. return t;
    83. }
    84. //关系运算<
    85. bool operator<(const Good &L,const Good &R)
    86. {
    87. if(L.a
    88. return true;
    89. }else{
    90. return false;
    91. }
    92. }
    93. //关系运算>
    94. bool operator>(const Good &L,const Good &R)
    95. {
    96. if(L.a>R.a && L.n>R.n && L.f>R.f){
    97. return true;
    98. }else{
    99. return false;
    100. }
    101. }
    102. //关系运算>=
    103. bool operator>=(const Good &L,const Good &R)
    104. {
    105. if(L.a>=R.a && L.n>=R.n && L.f>=R.f){
    106. return true;
    107. }else{
    108. return false;
    109. }
    110. }
    111. //关系运算<=
    112. bool operator<=(const Good &L,const Good &R)
    113. {
    114. if(L.a<=R.a && L.n<=R.n && L.f<=R.f){
    115. return true;
    116. }else{
    117. return false;
    118. }
    119. }
    120. //关系运算==
    121. bool operator==(const Good &L,const Good &R)
    122. {
    123. if(L.a==R.a && L.n==R.n && L.f==R.f){
    124. return true;
    125. }else{
    126. return false;
    127. }
    128. }
    129. //赋值运算-=
    130. Good &operator-=(Good &L,const Good &R)
    131. {
    132. L.a-=R.a;
    133. L.n-=R.n;
    134. L.f-=R.f;
    135. return L;
    136. }
    137. //赋值运算+=
    138. Good &operator+=(Good &L,const Good &R)
    139. {
    140. L.a+=R.a;
    141. L.n+=R.n;
    142. L.f+=R.f;
    143. return L;
    144. }
    145. //赋值运算*=
    146. Good &operator*=(Good &L,const Good &R)
    147. {
    148. L.a*=R.a;
    149. L.n*=R.n;
    150. L.f*=R.f;
    151. return L;
    152. }
    153. //赋值运算/=
    154. Good &operator/=(Good &L,const Good &R)
    155. {
    156. L.a/=R.a;
    157. L.n/=R.n;
    158. L.f/=R.f;
    159. return L;
    160. }
    161. //赋值运算%=
    162. Good &operator%=(Good &L,const Good &R)
    163. {
    164. L.a%=R.a;
    165. L.n%=R.n;
    166. L.f%=R.f;
    167. return L;
    168. }
    169. int main()
    170. {
    171. cout << "-----0-----" << endl;
    172. Good s0(1,2,3);
    173. s0.show();
    174. cout << "-----1-----" << endl;
    175. Good s1(3,2,1);
    176. s1.show();
    177. cout << "----2.0----" << endl;
    178. Good s2=s0+s1;
    179. s2.show();
    180. cout << "----2.1----" << endl;
    181. s2+=s1;
    182. s2.show();
    183. cout << "s2>s1?" << endl;
    184. bool outcome=s2>s1;
    185. cout << outcome << endl;
    186. return 0;
    187. }

    类内函数实现:

    1. #include
    2. using namespace std;
    3. class Good
    4. {
    5. private:
    6. int n;
    7. int f;
    8. int a;
    9. public:
    10. Good(){}
    11. Good(int n,int f,int a):n(n),f(f),a(a){}
    12. void show() const
    13. {
    14. cout << "n:" << n << endl;
    15. cout << "f:" << f << endl;
    16. cout << "a:" << a << endl;
    17. }
    18. //成员
    19. //算数+
    20. const Good operator+(const Good &p) const
    21. {
    22. Good t;
    23. t.a=a+p.a;
    24. t.n=n+p.n;
    25. t.f=f+p.f;
    26. return t;
    27. }
    28. //算数-
    29. const Good operator-(const Good &p) const
    30. {
    31. Good t;
    32. t.a=a-p.a;
    33. t.n=n-p.n;
    34. t.f=f-p.f;
    35. return t;
    36. }
    37. //算数*
    38. const Good operator*(const Good &p) const
    39. {
    40. Good t;
    41. t.a=a*p.a;
    42. t.n=n*p.n;
    43. t.f=f*p.f;
    44. return t;
    45. }
    46. //算数/
    47. const Good operator/(const Good &p) const
    48. {
    49. Good t;
    50. t.a=a/p.a;
    51. t.n=n/p.n;
    52. t.f=f/p.f;
    53. return t;
    54. }
    55. //算数%
    56. const Good operator%(const Good &p) const
    57. {
    58. Good t;
    59. t.a=a%p.a;
    60. t.n=n%p.n;
    61. t.f=f%p.f;
    62. return t;
    63. }
    64. //关系>
    65. bool operator>(const Good &R) const
    66. {
    67. if(a>R.a && n>R.n && f>R.f){
    68. return true;
    69. }else{
    70. return false;
    71. }
    72. }
    73. //关系<
    74. bool operator<(const Good &R) const
    75. {
    76. if(a
    77. return true;
    78. }else{
    79. return false;
    80. }
    81. }
    82. //关系==
    83. bool operator==(const Good &R) const
    84. {
    85. if(a==R.a && n==R.n && f==R.f){
    86. return true;
    87. }else{
    88. return false;
    89. }
    90. }
    91. //关系>=
    92. bool operator>=(const Good &R) const
    93. {
    94. if(a>=R.a && n>=R.n && f>=R.f){
    95. return true;
    96. }else{
    97. return false;
    98. }
    99. }
    100. //关系<=
    101. bool operator<=(const Good &R) const
    102. {
    103. if(a<=R.a && n<=R.n && f<=R.f){
    104. return true;
    105. }else{
    106. return false;
    107. }
    108. }
    109. //赋值+=
    110. Good &operator+=(const Good &R)
    111. {
    112. a+=R.a;
    113. n+=R.n;
    114. f+=R.f;
    115. return *this;
    116. }
    117. //赋值=
    118. Good &operator=(const Good &R)
    119. {
    120. a=R.a;
    121. n=R.n;
    122. f=R.f;
    123. return *this;
    124. }
    125. //赋值-=
    126. Good &operator-=(const Good &R)
    127. {
    128. a-=R.a;
    129. n-=R.n;
    130. f-=R.f;
    131. return *this;
    132. }
    133. //赋值%=
    134. Good &operator%=(const Good &R)
    135. {
    136. a%=R.a;
    137. n%=R.n;
    138. f%=R.f;
    139. return *this;
    140. }
    141. //赋值/=
    142. Good &operator/=(const Good &R)
    143. {
    144. a/=R.a;
    145. n/=R.n;
    146. f/=R.f;
    147. return *this;
    148. }
    149. //赋值*=
    150. Good &operator*=(const Good &R)
    151. {
    152. a*=R.a;
    153. n*=R.n;
    154. f*=R.f;
    155. return *this;
    156. }
    157. };
    158. int main()
    159. {
    160. cout << "-----0-----" << endl;
    161. Good s0(1,2,3);
    162. s0.show();
    163. cout << "-----1-----" << endl;
    164. Good s1(3,2,1);
    165. s1.show();
    166. cout << "----2.0----" << endl;
    167. Good s2=s0+s1;
    168. s2.show();
    169. cout << "----2.1----" << endl;
    170. s2+=s1;
    171. s2.show();
    172. cout << "s2>s1?" << endl;
    173. bool outcome=s2>s1;
    174. cout << outcome << endl;
    175. return 0;
    176. }

  • 相关阅读:
    docker-compose 部署rabbitmq 15672打不开
    C# 使用 RSA 加密算法生成证书签名产生“The system cannot find the file specified”异常
    Linux学习记录——이십팔 网络基础(1)
    在Mac上使用安卓桌面模式
    9.14-广读最新研究方向论文核心思路汇总
    数据库顶会 VLDB 2023 论文解读:字节跳动如何解决超大规模流式任务运维难题
    基于springboot的高校失物招领系统毕业设计源码111731
    Windows系统搭建VisualSVN服务并结合内网穿透实现公网访问
    群晖-使用docker套件部署Prometheus+Grafana
    Scrapy + selenium + 超级鹰验证码识别爬取网站
  • 原文地址:https://blog.csdn.net/m0_61834469/article/details/133754410