C++ 重载运算符,语法+示例,非常详细!!!

定义与说明

运算符重载是一种特殊的函数重载,即把运算符当做函数名进行重载

运算符重载是对已有的运算符使用范围进行扩展,使运算符在保持原功能的情况下,可以对更多的数据类型操作起作用

例如:一个Date类,声明a,b两个对象,执行 a - b 会报错,但是重载 “-”后就能实现对象的相减

为什么要对运算符重载

C++预定义中的运算符的作用对象只局限于那些基本数据类型,如int + int ,int + float 等等

语法

返回值类型  operator运算符名称(形参列表)
{
	函数体
}

规定

  1. 不允许用户自己定义新的运算符
  2. 运算符重载不应该改变运算符被公认的功能。如把 “+”重载成减法功能
  3. 重载不能改变运算符操作数的个数。双目运算符需要两个参数,重载后仍需要两个参数
  4. 重载不能改变运算符的优先级。只能通过"()"强制改变
  5. 重载不能改变结合性。如*,/都是左结合性,不能重载成右结合性
  6. 运算符重载函数一般声明为类的成员函数,也可以声明为全局函数,若为全局函数,要访问类的private成员,则要声明为类的友元
  7. 运算符重载函数的参数要至少有一个是类的对象或类的引用。如:类名 operator+(类名 引用对象)

举例 重载“+”

重载 “+” 实现对象的相加

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
class Complex {
	private:
		double m_real;
		double m_image;
	public:
		Complex():m_image(0.0),m_real(0.0) {		//重载之前要对成员变量赋初值
		}
		Complex(double real,double image) {
			m_real = real;
			m_image = image;
		}
		Complex operator+(Complex &A) {		//重载
			Complex B;
			B.m_image = this -> m_image + A.m_image;    //1
			B.m_real = this -> m_real + A.m_real;		//2
			return B;
		}
	//还可以写成更简单的形式(去掉 1 , 2):
		  //return Complex(this -> m_image + A.m_image,this -> m_real + A.m_real);
		
		void Disp() const {
			cout<<m_real<<"i+"<<m_image;
		}
};
main() {
	Complex c1(2.0,2.0);
	Complex c2(1.0,2.0);
	Complex c3;	
	c3 = c1 + c2;			//还能写成  c3 = c1.operator+c2;
	c3.Disp();
}

11

过程:执行时,编译器检测到 “+”号(+ 具有左结合性)左边是一个Complex对象,就会调用成员函数operator+(),也就是c1+c2,实质上是 “c1.operator+(c2);” 这是标准的函数调用形式。 (c1是要调用的函数的对象,c2是函数的实参,operator+ 是函数名)

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
class Complex {
	private:
		double m_real;
		double m_image;
	public:
		Complex():m_image(0.0),m_real(0.0) {
		}
		Complex(double real,double image) {
			m_real = real;
			m_image = image;
		}
							
		friend Complex operator+(Complex &A , Complex &B) {		//重载
			return Complex(A.m_image + B.m_image,A.m_real + B.m_real);
		}
		void Disp() const {
			cout<<m_real<<"i+"<<m_image;
		}
};
main() {
	Complex c1(2.0,2.0);
	Complex c2(1.0,2.0);
	Complex c3;
	c3=operator+(c1,c2);
	//c3 = c1 + c2;
	c3.Disp();
}

可以重载的运算符

双目算术运算符+,-,*,/,%
关系运算符==,!=,<,>,<=,>=
逻辑运算符!,||,&&
单目运算符+,-,*(指针),&
自增自减运算符++,–
位运算符|,&,~,^,<<,>>
赋值运算符=,+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=
空间申请与释放new, delete ,new[] ,delete[]
其他运算符()(函数调用),->(成员访问),->*(成员指针访问),,(逗号),[](下标)

不可重载的运算符

成员访问运算符.
成员指针访问运算符*
域运算符::
长度运算符sizeof
条件运算符?:
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++中的运算符重载允许您自定义运算符的行为。您可以为自定义类型定义运算符,使其能够执行特定的操作。 要重载运算符,您需要使用特殊的函数名称和语法。以下是一个示例,演示如何重载加法运算符(+): ```cpp #include <iostream> class Complex { private: double real; double imaginary; public: Complex(double r = 0.0, double i = 0.0) : real(r), imaginary(i) {} // 重载加法运算符 Complex operator+(const Complex& other) const { Complex result; result.real = real + other.real; result.imaginary = imaginary + other.imaginary; return result; } // 重载输出运算符 friend std::ostream& operator<<(std::ostream& os, const Complex& c) { os << "(" << c.real << ", " << c.imaginary << ")"; return os; } }; int main() { Complex c1(2.5, 3.7); Complex c2(1.2, 4.9); Complex sum = c1 + c2; std::cout << "Sum: " << sum << std::endl; return 0; } ``` 在上面的示例中,我们定义了一个名为`Complex`的自定义类,表示复数。我们重载了加法运算符(`+`),使其能够对两个`Complex`对象执行相加操作。我们还重载了输出运算符(`<<`),以便能够方便地打印`Complex`对象。 在`main`函数中,我们创建了两个`Complex`对象`c1`和`c2`,并将它们相加得到`sum`。然后,我们使用重载的输出运算符将结果打印到控制台。 请注意,不是所有运算符都可以被重载,并且有一些重载运算符的限制和规则需要遵循。有关更多信息,请参阅C++文档中有关运算符重载的章节。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值