重载运算符一

运算符重载的特点

在实现运算符重载的方法有2种:
1.用类的成员函数来实现;
2.通过类的友元函数来实现。

一个很重要的特点:
1.用类的成员函数来实现
成员函数的形参个数 = 几目运算符 - 1
假设重载运算符=,+,或+=,这些运算符是双目运算符,所以类的成员函数的形参必须为1.
2.通过类的友元函数来实现
友元函数的形参个数 = 几目运算符
假设重载运算符=,+,或+=,这些运算符是双目运算符,所以友元函数的形参必须为2.

----------------------------------------------------以上摘自csdn猿人的博客------------------------------------------------------------------



一、重载前置自加运算符++i与后置运算符i++;

先上一个程序吧,然后继续说明。

#include<iostream>
using namespace std;
class num
{
public:
	num(){ n = 1;cout<<"构造函数执行\n";}
	num(const num&s)
	{
	
		this->n = s.n;
		cout<<"复制构造函数执行\n";
	}

	num(int i)
	{
	
		n = i;
		cout<<"构造函数执行\n";
	}
~num()
{

	cout<<"析构函数执行\n";
}
int get() const 
{

	return n;
}

void set(int x)
{

	n = x;
}

const num &operator++()
{

	++n;
	return *this;
}

const num operator++(int o)
{

	num temp(*this);
	++n;
	return temp;

}


private:
	int n;


};

int main()
{
	num i;
	cout<<"i:"<<i.get()<<endl;
	num x = ++i;
	cout<<"x:"<<x.get()<<endl;
	cout<<"i:"<<i.get()<<endl;

	x = i++;

	cout<<"x:"<<x.get()<<endl;
	cout<<"i:"<<i.get()<<endl;



	return 0;
}


程序执行的结果是:

重载运算符一_第1张图片

前置自加运算符与后置自加运算符的却别在于:

const num operator++(int o){  };int o并没有实际的意义,只是为了区别两种该函数而已。


二、下面以友元函数的形式重载输入与输出运算浮。

#include<iostream>
using std::cout;
using std::cin;
using std::endl;
using std::ostream;
using std::istream;

#include<iomanip>
using std::setw;

class PhoneNumber
{

	friend ostream &operator<<(ostream &,const PhoneNumber &);
	friend istream &operator>>(istream &, PhoneNumber &);

private:
	char areCode[4];
	char exchange[4];
	char line[5];


};

ostream &operator<<(ostream &output,const PhoneNumber &num)
{

	output<< "(" <<num.areCode<< ")"
		<<num.exchange<< "-"<<num.line;

	return output;


}

istream &operator>>(istream &input,PhoneNumber &num)
{
	input.ignore();
	input>>setw(4)>>num.areCode;
	input.ignore(2);
	input>>setw(4)>>num.exchange;
	input.ignore();
	input>>setw(5)>>num.line;

	return input;




}


int main()
{

	PhoneNumber phone;

	cout<<"Enter phone number in form (123) 456-7890:\n";

	cin>>phone;

	cout<<"The phone number entered was: ";

	cout<<phone<<endl;

	return 0;
}


程序执行的结果如下:

重载运算符一_第2张图片

你可能感兴趣的:(重载运算符一)