C++小记(四)

本文详细介绍了C++中的运算符重载概念及其应用,包括双目和单目运算符的重载方法,以及如何利用友元函数进行运算符重载。同时列举了常见运算符重载的例子,并给出了重载时需要注意的事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关键词:运算符重载,友元类

友元类

接上一篇结尾,友元类运用较少,但友元函数在运算符重载中扮演重要地位,用全局函数重载运算符都需要声明为友元函数,不然无法访问类中的成员变量

下面举例友元类:

class Complex
{
	friend class A;        //友元类A的声明
private:
	int m_a;
	int m_b;
public:
	Complex();
	Complex(int a, int b);
	bool operator ==(Complex &c);
	bool operator !=(Complex &c);
};

class A
{
private:
	int xxx;
public:
	A(int x)
	{
		xxx = x;
	}
	void print()
	{
		Complex c;
		cout << c.m_a << endl;     //之前声明A为友元类,所以可以访问类Complex中的成员变量
	}
};

各运算符重载

  •   概念所谓重载,就是重新赋予新的含义。函数重载就是对一个已有的函数赋予新的含义,使之实现新功能,因此,一个函数名就可以用来代表不同功能的函数,也就是”一名多用”。
  • 重载的限制:1、不可重载的运算符:  .       ::       .*      ?:       sizeof  
  •                    2、重载运算符函数可以对运算符作出新解释,但原有基本语义不变,不改变运算符的优先级,结合性以及所需要的操作数

下面列出几个常用运算符的重载:

//双目运算符的重载
Complex &operator +(Complex &c1);     //成员函数重载“+”	
friend Complex operator +(Complex &c1, Complex &c2);
// 全局函数重载“+”,所以定义为友元函数才能访问成员函数


bool operator ==(Complex &c);
bool operator !=(Complex &c);
MyString &operator =(const MyString &str);   
MyString &operator +=(const MyString &str);

/****************************************************************/
//单目运算符
Complex operator ++(int);         //成员函数重载后置“++”,后置++不能作为左值,所以不要返回引用Complex &operator ++();               //成员函数重载前置“++”


/****************************************************************/
//其他运算符的重载

friend ostream &operator <<(ostream &out, const MyString &str);   //左移运算符的重载
friend istream &operator >>(istream &in,MyString &str);           //输入不能是const
char &operator [](int index);                                     //[]的重载

其他的类似于   -  ,-- ,(),以此类比。

推荐一个整理较为齐全的博客,仅供参考,如需转载请注明出处:

https://wuyuans.com/2012/09/cpp-operator-overload

重载的注意事项:

  • 运算符运算结果可作为左值的,重载函数需返回引用
  • = [ ]  ( )  ->    只能通过成员函数进行重载
  • C++中用一个占位参数int区分前置++和后置++(--相同)
  • 一般不重载&&,| | ,因为&&和||是C++中非常特殊的操作符,重载的话C++的函数参数都会被求值,无法实现短路规则 
  • 使用成员函数重载时,参数个数减1,因为成员函数默认包含this指针
  •  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值