C++学习-运算符重载






#include<iostream>
using namespace std;
//重载函数是类的成员函数 ,形参个数=操作数-1;
class Point
{
public:
	Point(int x=0, int y=0):x(x), y(y){}
	//x1.show();   //x 和y  1.2
	void show()
	{
		cout << "x=" << x << endl << "y=" << y << endl;
	}
	//重载的过程就是调用函数的的过程
	//object1+object2;
	//object1.operator+(object2);
	//  this->x   a.x
	//函数返回值  operator+ :函数名  (参数)
	Point operator+(const Point &a)
	{
		Point object;
		//x1.operator+(x2);
		//x+a.x
		object.x = this->x+a.x;
		object.y = this->y+a.y;
		return object;
	}
	Point operator-(const Point &a){}

protected:
	int x;
	int y;
};


int main()
{

	Point x1(1, 2);
	Point x2(3, 4);
	Point x3 = x1 + x2;
	//对象.函数名(实参)
	//x1.operator+(x2);   x???
	x1.show();   //x 和y  1.2
	return 0;
}

//基本数据类型不需要重载运算  
//对类来说,重载:实现对象与对象之间的运算
#include<iostream>
using namespace std;
class Age
{
public:
	//构造函数+初始化参数列表
	Age(int num = 0, int age = 0) :age(age), num(num){}
	//友元重载函数的声明:  friend 函数返回值 函数名(参数)
	// 函数名: operator加上运算符组成函数名
	//友元重载的参数个数=操作数
	//双目运算符 
	friend  Age operator*(const Age &a,const Age &b);			
	friend  Age operator-(const Age &a, const Age &b);
	//有一些运算符必须使用成员函数的方式
	friend Age operator-(const Age& a);
	void show()
	{
		cout << "num=:" << num << endl;
		cout << "age=:" << age << endl;
	}
protected:
	int num;
	int age;
};
Age operator*(const Age &a, const Age &b)
{
	//重载函数的函数体,就是用打包,复杂运算符实现
	Age c;
	c.num = a.num*b.num;
	c.age = a.age*b.age;
	return c;
}

//友元重载操作数等于参数个数 
//单目运算符 
Age  operator-(const Age &a)
{
	Age b;
	b.num = -a.num;
	b.age = -a.age;
	return b;
}
//重载可以实现对象和对象之间的运算
//对象加对象有什么用???
//复数  1+2i
int main()
{
	Age a;
	Age b(1, 2);
	Age c(3, 4);
	a = b*c;   //a.num=b.num+c.num  a.age=b.age+c.age
	a.show();
	Age d = -a;
	d.show();
	system("pause");
	return 0;
}

#include<iostream>
#include <string>
using namespace std;

class student
{
public:
	student(int age = 0, int num = 0) :age(age), num(num){}
	//  cout ----ostream  输出流对象 
	//  cin  ----istream  输入流对象
	//          operator<<  函数名()
	friend ostream& operator<<(ostream& out, const student& mystudent);
	friend istream& operator>>(istream& put,student& mystudent);
protected:
	int age;
	int num;
};
//返回值一定是返回引用
//<< 连续操作 
//cout<<a<<b<<endl
ostream& operator<<(ostream& out, const student& mystudent)
{
	//out
	out <<"\tnum=:"<< mystudent.num <<"\tage=:"<< mystudent.age << endl;
	return out;
}

istream& operator>>(istream &put, student& mystudent)
{
	cout << "请输入编号和年龄" << endl;
	put >> mystudent.num >> mystudent.age;
	return put;
}

int main()
{
	student mystudent(16, 1);
	//cout对象<<自定义对象
	cout << mystudent;
	//请输入学生年龄和姓名
	student mystudent2;
	cin >> mystudent2;
	cout << mystudent2;

	string str("Anonymous");
	cout << str << endl;
	system("pause");
	return 0;
}

#include<iostream>
#include <string>
using namespace std;

class student
{
public:
	student(int age = 0, int num = 0) :age(age), num(num){}
	//  cout ----ostream  输出流对象 
	//  cin  ----istream  输入流对象
	//          operator<<  函数名()
	void outPut(ostream &out) //注意函数类型
	{
		out << "\tnum=:" << num << "\tage=:" <<age << endl;
	}
	void Input(istream &put)
	{
		cout << "请输入编号和年龄" << endl;
		put >> num >> age;
	}
	friend ostream& operator<<(ostream& out, student& mystudent);
	friend istream& operator>>(istream& put, student& mystudent);
protected:
	int age;
	int num;
};
//返回值一定是返回引用
//<< 连续操作 
//cout<<a<<b<<endl
ostream& operator<<(ostream& out, student& mystudent)
{
	//out
	mystudent.outPut(out);
	return out;
}

istream& operator>>(istream &put, student& mystudent)
{
	mystudent.Input(put);
	return put;
}

int main()
{
	student mystudent(16, 1);
	//cout对象<<自定义对象
	cout << mystudent;
	//请输入学生年龄和姓名
	student mystudent2;
	cin >> mystudent2;
	cout << mystudent2;

	string str("Anonymous");
	cout << str << endl;
	system("pause");
	return 0;
}




猜你喜欢

转载自blog.csdn.net/ydpawx/article/details/72397321
今日推荐