重载运算符( 二)——学习C++笔记

用两种方式分别实现一元操作符:前置++,前置--,后置++,后置--

         重载为友元函数,解释为:operator op(object)  参数由参数表的object 提供。

        重载为成员函数,解释为:Object.operator op()。

#include 
   
   
    
    
using namespace std;
class Complex{
private:
	int a;
	int b;
friend Complex& operator++(Complex& c1);
friend Complex operator++(Complex& c1,int);
public:
	Complex()
	{

	}
	Complex(int a,int b)
	{
		this->a=a;
		this->b=b;
	}
	//前置--成员函数
	Complex operator--()
	{
		this->a--;
		this->b--;
		return *this;
	}
	//后置--成员函数
	Complex operator--(int)
	{
		Complex temp;
		temp=*this;
		this->a--;
		this->b--;
		return temp;
	}
	void Cprint()
	{
		cout<
    
    <<"+"<<<"i"<
      
      
   
   

注意后置操作符比前置而言,参数中多出一个int占位符。

一般来说重载使用类成员函数方式,但当重载<<时,我们发现<<属于ostream类,我们无法修改。遇到这种情况时,我们使用友元函数的方式重载。

#include 
      
      
       
       
using namespace std;
class Complex{
private:
	int a;
	int b;
friend ostream& operator<<(ostream &out,Complex &c1);
public:
	Complex()
	{

	}
	Complex(int a,int b)
	{
		this->a=a;
		this->b=b;
	}
};
ostream& operator<<(ostream &out,Complex &c1)
{
	cout<
       
       
        
        <<"+"<
        
        
         
         <<"i"<
         
         
        
        
       
       
      
      


流操作符<<和>>,常常希望被连续使用,例如:cout << "hello" << endl; 因此这两个操作符的返回值应该是一个仍然支持这两个操作符的流引用。cout << "hello" 的返回值仍然是个流引用。

可选的其它方案包括:返回一个流对象和返回一个流对象指针。但是对于返回一个流对象,程序必须重新(拷贝)构造一个新的流对象,也就是说,连续的两个<<操作符实际上是针对不同对象的!这无法让人接受。

对于返回一个流指针则不能连续使用<<操作符。因此,返回一个流对象引用是惟一选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值