最近看了菜鸟教程里的C++教程
遇到很多运算符重载,为了方便我的学习,我把这些总结了一下
如有错误(包括之前的博文)请评论留言,谢谢!
由于代码里注释的很清楚,我就不做过多的解释了。
下面是这次总结的头文件,用来放置一些类和方法。
?| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 |
//C++运算符重载实例.h
#pragma once
#include <iostream>
using namespace std;
class chongzai
{
private:
int i, j, k;
public:
chongzai()
{
i = 0;
j = 0;
k = 0;
}
chongzai(int a, int b, int c)
{
i = a;
j = b;
k = c;
}
//以下分别为A1,A2,A3的显示函数
void display1()
{
cout << "A1:" << endl;
cout << "i=" << i << endl;
cout << "j=" << j << endl;
cout << "k=" << k << endl;
cout << "------------------" << endl;
}
void display2()
{
cout << "A2:" << endl;
cout << "i=" << i << endl;
cout << "j=" << j << endl;
cout << "k=" << k << endl;
cout << "------------------" << endl;
}
void display3()
{
cout << "A3:" << endl;
cout << "i=" << i << endl;
cout << "j=" << j << endl;
cout << "k=" << k << endl;
cout << "------------------" << endl;
}
/*************************************************************************************************/
/*
一元运算符重载:
递增运算符( ++ )和递减运算符( -- )
一元减运算符,即负号( - )
逻辑非运算符( ! )
*/
chongzai operator-() //以负号( - )为例
{
i = -i;
j = -j;
k = -k;
return chongzai(i, j, k);
}
/*************************************************************************************************/
/*
二元运算符重载:
二元运算符需要两个参数
加运算符( + ),减运算符( - ),乘运算符( * )和除运算符( / )
*/
chongzai operator+(const chongzai& n) //以加号( + )为例
{
chongzai A;
A.i = this->i + n.i;
A.j = this->j + n.j;
A.k = this->k + n.k;
return A;
}
/**********************************************************************************************/
/*
关系运算符重载:
大于( > ),小于( < ),大于等于( >= ),小于等于( <= ),等于( = )等
*/
bool operator<(const chongzai& n) //以小于号( < )为例
{
if (i < n.i)
return true;
if (i >= n.i)
return false;
return false;
}
/**********************************************************************************************/
/*
输入输出运算符重载:
流提取运算符 >> 和流插入运算符 <<
使用友元函数无需设置对象,而且符合人们cout<<和cin>>的书写习惯
*/
friend ostream& operator<<(ostream& output, const chongzai& A)
{
output << "i:" << A.i << endl;
output << "j:" << A.j << endl;
output << "k:" << A.k << endl;
output << "------------------" << endl;
return output;
}
friend istream& operator>>(istream& input, chongzai& A)
{
input >> A.i >> A.j >> A.k;
return input;
}
/*************************************************************************************************/
/*
++和--运算符重载:
包括前置和后置
*/
chongzai operator++() //以前置++为例
{
++i;
++j;
++k;
return chongzai(i, j, k);
}
chongzai operator++(int) //后置++的特殊格式
{
i++;
j++;
k++;
return chongzai(i, j, k);
}
/*************************************************************************************************/
/*
赋值运算符重载:
赋值运算符( = ),比如拷贝构造函数
*/
void operator=(const chongzai& A) //以拷贝构造函数为例
{
i = A.i;
j = A.j;
k = A.k;
}
/*************************************************************************************************/
/*
函数调用运算符重载:
函数调用运算符 () 可以被重载用于类的对象。
当重载 () 时,您不是创造了一种新的调用函数的方式,
相反地,这是创建一个可以传递任意数目参数的运算符函数。
*/
chongzai operator()(int a, int b, int c)
{
chongzai A;
//利用()里的参数进行各种运算
A.i = a + b;
A.j = b + c;
A.k = a + c;
return A;
}
};
class chongzai2
{
private:
int arr[5];
public:
int n;
chongzai2()
{
for (n = 0; n < 5; n++)
{
arr[n] = n;
}
}
/*************************************************************************************************/
/*
下标运算符[]重载:
*/
int& operator[](int n)
{
if (n >= 5)
{
cout << "索引超过最大值" << endl;
return arr[0];
}
return arr[n];
}
};
|
然后这是主程序
?| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
//C++运算符重载实例.cpp
#include "标头.h"
#include <iostream>
using namespace std;
int main()
{
chongzai A1(10, 20, 30), A2(100, 200, 300), A3;
-A1; //一元运算符重载
A1.display1();
A3 = A1 + A2; //二元运算符重载
A3.display3();
if (A1 < A2) //关系运算符重载
cout << "D1<D2" << endl << endl;
else
cout << "D1>=D2" << endl << endl;
cout << "请输入A3的各项参数:" << endl; //输入输出元算符重载
cin >> A3;
cout << "A3的各项参数为:" << endl;
cout << A3;
++A1; //前置++运算符重载
A1.display1();
A1++; //后置++运算符重载
A1.display1();
A1 = A2; //赋值运算符重载
A1.display1();
A2 = A3(2, 4, 6); //函数调用运算符()重载
A2.display2();
chongzai2 B;
cout << "B[4]的值为:" << B[4] << endl;
cout << "B[5]的值为:" << B[5] << endl; //下标运算符[]重载
return 0;
}
|
在输入A3的时候,举个例子,输入1 2 3
输出结果为

总结
到此这篇关于C++运算符重载实例(调试环境 Visual Studio 2019)的文章就介绍到这了,更多相关C++运算符重载内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/pineapple_C/article/details/104282259








发表评论
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。