双目运算符和单目运算符的重载

2024-04-09 19:12
文章标签 重载 运算符 双目 单目

本文主要是介绍双目运算符和单目运算符的重载,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

题目

源码

结果示例


 

题目

建立一个矩阵类,可以完成指定的操作或运算。

说明:

  1. 矩阵为2行3列,基类型为整型;
  2. 操作或运算:初始化(>>)、输出(<<)、赋值(=)、两个同类型矩阵的相加(+)、矩阵前置自增(++,即所有元素都加1)、矩阵后置自增(++,即所有元素都加1)、一个整数乘矩阵(*,即该整数乘以每个元素)、矩阵乘一个整数(*,即每个元素乘以该整数)。

要求:针对矩阵的各种操作,请先确认使用何种类型函数实现(仅限于成员函数、友元函数,暂不使用转换构造函数和类型转换函数)。

提示:运算符重载一般遵循如下原则:(1)=、[]、()、->必须作为成员函数;(2)<<、>>、类型转换运算符必须作为友元函数;(3)一般将单目运算符和复合运算符重载为成员函数;(4)一般将双目运算符重载为友元函数。

 

可以利用如下测试函数进行验证:

int main()
{Matrix a(1,2,3,4,5,6),b(6,5,4,3,2,1),c,d,e;int a1=2,a2=3;//用于测试数乘运算时用到的整数//(1)测试:>>,输入a和b//a的值如下://	1	1	1//	2	2	2//b的值如下://	3	2	1//	6	5	4cout<<"请输入a和b"<<endl;cin>>a>>b;cout<<"--------------------------"<<endl;//(2)测试:<<,输出a和b//输出结果格式://a的值如下:(b与a类似)//	1 1 1//	2 2 2cout<<"a的值如下:"<<endl;cout<<a<<endl;cout<<"b的值如下:"<<endl;cout<<b<<endl;cout<<"--------------------------"<<endl;//(3)测试:+,并输出a+b的结果cout<<"a+b的结果如下:"<<endl;cout<<a+b<<endl;cout<<"--------------------------"<<endl;//(4)测试:=,将a赋给c,并输出ccout<<"执行c=a之后,c的值如下:"<<endl;c=a;cout<<c;cout<<"--------------------------"<<endl;//(4)测试:整数左乘矩阵,计算a1*c并输出cout<<"测试整数左乘矩阵"<<endl;cout<<"整数为:"<<a1<<endl;cout<<"矩阵为:"<<endl<<c;cout<<"整数左乘矩阵结果如下:"<<endl;cout<<a1*c;cout<<"--------------------------"<<endl;//(5)测试:整数右乘矩阵,计算c*a2并输出cout<<"测试整数右乘矩阵"<<endl;cout<<"整数为:"<<a2<<endl;cout<<"矩阵为:"<<endl<<c;cout<<"整数右乘矩阵结果如下:"<<endl;cout<<c*a2;cout<<"--------------------------"<<endl;//(6)测试:前置自增++,计算d=++c并输出cout<<"测试前置自增++"<<endl;cout<<"c的初始值如下:"<<endl;cout<<c;cout<<"d=++c执行之后结果如下:"<<endl;d=++c;cout<<"c的结果如下:"<<endl;cout<<c;cout<<"d的结果如下:"<<endl;cout<<d;cout<<"--------------------------"<<endl;//(7)测试:后置自增++,计算e=c++并输出cout<<"测试后置自增++"<<endl;cout<<"c的初始值如下:"<<endl;c=a;cout<<c;cout<<"e=c++执行之后结果如下:"<<endl;e=c++;cout<<"c的结果如下:"<<endl;cout<<c;cout<<"e的结果如下:"<<endl;cout<<e;cout<<"--------------------------"<<endl;return 0;
}

源码

#include <iostream>using namespace std;class Matrix
{
private:int matrix[2][3];public:Matrix(int a = 0, int b = 0, int c = 0, int d = 0, int e = 0, int f = 0){matrix[0][0] = a;matrix[0][1] = b;matrix[0][2] = c;matrix[1][0] = d;matrix[1][1] = e;matrix[1][2] = f;}friend istream& operator>>(istream& in, Matrix& m);friend ostream& operator<<(ostream& out, const Matrix& m);Matrix operator+(const Matrix& other);Matrix operator*(int num);friend Matrix operator*(int num, const Matrix& m);Matrix& operator=(const Matrix& other);Matrix& operator++();Matrix operator++(int);
};istream& operator>>(istream& in, Matrix& m)
{for (int i = 0; i < 2; i++){for (int j = 0; j < 3; j++){in >> m.matrix[i][j];}}return in;
}ostream& operator<<(ostream& out, const Matrix& m)
{for (int i = 0; i < 2; i++){for (int j = 0; j < 3; j++){out << m.matrix[i][j] << " ";}out << endl;}return out;
}Matrix Matrix::operator+(const Matrix& other)
{Matrix result;for (int i = 0; i < 2; i++){for (int j = 0; j < 3; j++){result.matrix[i][j] = matrix[i][j] + other.matrix[i][j];}}return result;
}Matrix Matrix::operator*(int num)
{Matrix result;for (int i = 0; i < 2; i++){for (int j = 0; j < 3; j++){result.matrix[i][j] = matrix[i][j] * num;}}return result;
}Matrix operator*(int num, const Matrix& m)
{Matrix result;for (int i = 0; i < 2; i++){for (int j = 0; j < 3; j++){result.matrix[i][j] = m.matrix[i][j] * num;}}return result;
}Matrix& Matrix::operator=(const Matrix& other)
{for (int i = 0; i < 2; i++){for (int j = 0; j < 3; j++){matrix[i][j] = other.matrix[i][j];}}return *this;
}Matrix& Matrix::operator++()
{for (int i = 0; i < 2; i++){for (int j = 0; j < 3; j++){matrix[i][j]++;}}return *this;
}Matrix Matrix::operator++(int)
{Matrix temp = *this;++(*this);return temp;
}int main()
{Matrix a(1, 2, 3, 4, 5, 6), b(6, 5, 4, 3, 2, 1), c, d, e;int a1 = 2, a2 = 3;//用于测试数乘运算时用到的整数//(1)测试:>>,输入a和b//a的值如下://	1	1	1//	2	2	2//b的值如下://	3	2	1//	6	5	4cout << "请输入a和b" << endl;cin >> a >> b;cout << "--------------------------" << endl;//(2)测试:<<,输出a和b//输出结果格式://a的值如下:(b与a类似)//	1 1 1//	2 2 2cout << "a的值如下:" << endl;cout << a << endl;cout << "b的值如下:" << endl;cout << b << endl;cout << "--------------------------" << endl;//(3)测试:+,并输出a+b的结果cout << "a+b的结果如下:" << endl;cout << a + b << endl;cout << "--------------------------" << endl;//(4)测试:=,将a赋给c,并输出ccout << "执行c=a之后,c的值如下:" << endl;c = a;cout << c;cout << "--------------------------" << endl;//(4)测试:整数左乘矩阵,计算a1*c并输出cout << "测试整数左乘矩阵" << endl;cout << "整数为:" << a1 << endl;cout << "矩阵为:" << endl << c;cout << "整数左乘矩阵结果如下:" << endl;cout << a1 * c;cout << "--------------------------" << endl;//(5)测试:整数右乘矩阵,计算c*a2并输出cout << "测试整数右乘矩阵" << endl;cout << "整数为:" << a2 << endl;cout << "矩阵为:" << endl << c;cout << "整数右乘矩阵结果如下:" << endl;cout << c * a2;cout << "--------------------------" << endl;//(6)测试:前置自增++,计算d=++c并输出cout << "测试前置自增++" << endl;cout << "c的初始值如下:" << endl;cout << c;cout << "d=++c执行之后结果如下:" << endl;d = ++c;cout << "c的结果如下:" << endl;cout << c;cout << "d的结果如下:" << endl;cout << d;cout << "--------------------------" << endl;//(7)测试:后置自增++,计算e=c++并输出cout << "测试后置自增++" << endl;cout << "c的初始值如下:" << endl;c = a;cout << c;cout << "e=c++执行之后结果如下:" << endl;e = c++;cout << "c的结果如下:" << endl;cout << c;cout << "e的结果如下:" << endl;cout << e;cout << "--------------------------" << endl;return 0;
}

结果示例

9bdffed78fb44e4895690cf5989d15e7.png5053a6146c324a2e9734fec094d70a8a.png

 

这篇关于双目运算符和单目运算符的重载的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/888988

相关文章

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

【重学 MySQL】十九、位运算符的使用

【重学 MySQL】十九、位运算符的使用 示例检查权限添加权限移除权限 在 MySQL 中,位运算符允许你直接在整数类型的列或表达式上进行位级操作。这些操作对于处理那些需要在二进制表示上进行直接修改或比较的场景特别有用,比如权限管理、状态标记等。 &(位与) 对两个数的二进制表示进行位与操作。只有两个相应的二进制位都为 1 时,结果的该位才为 1,否则为 0。 |(位

C语言程序设计(数据类型、运算符与表达式)

一、C的数据类型 C语言提供的数据类型: 二、常量和变量 2.1常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量。 常量区分为不同的类型: 程序中用#define(预处理器指令)命令行定义变量将代表常量,用一个标识符代表一个常量,称为符合常量。 2.2变量 变量代表内存中具有特定属性的一个存储单元,用来存放数据,在程序运行期间,这些值是可以 改变的。 变

第二十四章 rust中的运算符重载

注意 本系列文章已升级、转移至我的自建站点中,本章原文为:rust中的运算符重载 目录 注意一、前言二、基本使用三、常用运算符四、通用约束 一、前言 C/C++中有运算符重载这一概念,它的目的是让即使含不相干的内容也能通过我们自定义的方法进行运算符操作运算。 比如字符串本身是不能相加的,但由于C++中的String重载了运算符+,所以我们就可以将两个字符串进行相加、但实际

C++可以被重载的操作符Overloadable operators

C++允许绝大多数操作符被重载,也就是重新定义操作符实现的功能,这样它们的行为可以被设计出来以适应所有的数据类型,包括类。 以下是C++可以被重载的操作符(Overloadable operators): //四则运算符+ - * / %+= -= *= /= %=//比较运算符> >= == != //赋值运算符= //位操作

c++/《重载操作符》

为什么要对运算符进行重载:         C++预定义中的运算符的操作对象只局限于基本的内置数据类型,但是对于我们自定义的类型(类)是没有办法操作的。但是大多时候我们需要对我们定义的类型进行类似的运算,这个时候就需要我们对这么运算符进行重新定义,赋予其新的功能,以满足自身的需求。 <返回类型说明符> operator <运算符符号>(<参数表>) { <函数体> }

《C++中的移动构造函数与移动赋值运算符:解锁高效编程的最佳实践》

在 C++的编程世界中,移动构造函数和移动赋值运算符是提升程序性能和效率的重要工具。理解并正确运用它们,可以让我们的代码更加高效、简洁和优雅。 一、引言 随着现代软件系统的日益复杂和对性能要求的不断提高,C++程序员需要不断探索新的技术和方法来优化代码。移动构造函数和移动赋值运算符的出现,为解决资源管理和性能优化问题提供了有力的手段。它们允许我们在不进行不必要的复制操作的情况下,高效地转移资源

Java基础--基本运算符介绍

Java运算符 用于指明对于操作数的运算方式。 分类: 按照操作数的数目来进行分类: 单目a++ 双目a+b 三目(a>b)?x:y; 按照运算符的功能来进行分类: 算术运算:+ - * / %(取余)++ – 如: int x=1; x=x+1;//x空间内的值,自己增加了一个 x++;//x空间内的值,自增一个 ++x;//对于x空间内的值来讲都是一致,最终的结果都自

java基础总结10-面向对象6(方法的重载)

1 方法的重载 方法名一样,但参数不一样,这就是重载(overload)。   所谓的参数不一样,主要有两点:第一是参数的个数不一样,第二是参数的类型不一样。只要这两方面有其中的一方面不一样就可以构成方法的重载了。 package cn.galc.test;public class TestOverLoad {void max(int a, int b) {System.out.prin

【MATLAB】运算符及其优先级

在MATLAB语言中,运算符可以灵活组合以构建更复杂的运算表达式。需要注意的是,与其他高级编程语言类似,MATLAB中的运算符也有优先级。掌握运算优先级有助于我们正确地执行复杂的计算。以下是按照从高到低顺序排列的MATLAB运算符及其优先级列表。 括号 ()。数组的转秩 ( .’ ),数组幂 ( .^ ) ,复转秩 ( ’ ),矩阵幂 ( ^ )。代数正 ( + ),代数负 ( - ),逻辑非