最近看了菜鸟教程里的C++教程
遇到很多运算符重载,为了方便我的学习,我把这些总结了一下
如有错误(包括之前的博文)请评论留言,谢谢!
由于代码里注释的很清楚,我就不做过多的解释了。
下面是这次总结的头文件,用来放置一些类和方法。
//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]; } };
然后这是主程序
//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++运算符重载内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!
本文向大家介绍Javascript实现运算符重载详解,包括了Javascript实现运算符重载详解的使用技巧和注意事项,需要的朋友参考一下 最近要做数据处理,自定义了一些数据结构,比如Mat,Vector,Point之类的,对于加减乘除之类的四则运算还要重复定义,代码显得不是很直观,javascript没有运算符重载这个像C++、C#之类的功能的确令人不爽,于是想“曲线救国”,自动将翻译代码实现运
本文向大家介绍C#运算符重载用法实例分析,包括了C#运算符重载用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#运算符重载用法。分享给大家供大家参考。具体分析如下: 希望本文所述对大家的C#程序设计有所帮助。
本文向大家介绍C语言 位运算详解及示例代码,包括了C语言 位运算详解及示例代码的使用技巧和注意事项,需要的朋友参考一下 所谓位运算,就是对一个比特(Bit)位进行操作。在《二进制思想以及数据的存储》一节中讲到,比特(Bit)是一个电子元器件,8个比特构成一个字节(Byte),它已经是粒度最小的可操作单元了。 C语言提供了六种位运算符: 运算符 & | ^ ~ << >> 说明 按位与 按位或 按位
主要内容:运算符重载的实现,可重载与不可重载的运算符C# 中支持运算符重载,所谓运算符重载就是我们可以使用自定义类型来重新定义 C# 中大多数运算符的功能。运算符重载需要通过 operator 关键字后跟运算符的形式来定义的,我们可以将被重新定义的运算符看作是具有特殊名称的函数,与其他函数一样,该函数也有返回值类型和参数列表,如下例所示: public static Box operator+ (Box b, Box c) { Box bo
本文向大家介绍c++ *运算符重载,包括了c++ *运算符重载的使用技巧和注意事项,需要的朋友参考一下 运算符重载,对象和指向对象的指针 直接上code 运行结果: t是指向test对象的指针,(*t) 也就是一个test对象。 所以只有 *t才真正的调用了 运算符的重载函数。
我试图重载结构中映射的运算符<<,但得到一个编译错误: 不存在从“std::_rb_tree_const_iterator >”到“std::_rb_tree_iterator >”的合适的用户定义转换