c++之运算符的重载

一、定义

    为什么要重载运算符?

    在c++里面的一些基本类型其运算“+-*/”等等,而你自己用class定义的类并不能进行这些基本的基本

    运算,这就是为何要重载运算符,非常重要。

    运算符重载的实质:

    运算符重载的实质就是函数重载或函数多态。运算符重载是一种形式的C++多态。目的在于让人能用同名

    的函数来完成不同的基本操作。运算符函数形式:operator p(argument -list)p为要重载的运算符符号。

二、使用

    先了解一下什么运算符可以重载,什么运算符不能重载:

    

      这些运算符是可以重载的。

      而   .        .*     ::     ?:  这些是不能重载的。

      接下来写一个简单的例子来分析一下具体的重载操作:

class Teacher
{
	public :
		int age;
		string name; 
};
Teacher operator + (Teacher T1,Teacher T2)//重载双目运算符的写法
{
	Teacher T;
	T.age = T1.age +T2.age ;
	T.name =T1.name+T2.name;
	return 	T;
};
int main()
{
	Teacher T,T1,T2;
	T1.age =23;
	T2.age =25;
	T1.name = "lu";
	T2.name ="cifer"; 
	T=T1+T2;
	printf("%d",T.age );
	cout<<T.name <<endl;
} 

    以上的例子是用了类外的函数重载的,接下来我们用成员函数来重载“+”,来看看区别。

class Teacher
{
public :
	int age;
	string name; 
public :
	Teacher operator + (Teacher T1)//注意此时只有一个参数存在因为this指针的存在
	{
	Teacher T;
	T.age = this->age+T1.age;
	T.name =this->name+T1.name;
	return 	T;
	}
};
int main()
{
	Teacher T,T1,T2;
	T1.age =23;
	T2.age =25;
	T1.name = "lu";
	T2.name ="cifer"; 
	T=T1+T2;
	printf("%d\n",T.age );
	cout<<T.name <<endl;
}

 接下来使用友元函数重载流操作符:

class Teacher
{
public :
	friend ostream& operator << (ostream& cout,Teacher& par);//你必须注意到流操作符重载时的写法
private:
 	int age=20;
	string name= "lucifer";
};
ostream& operator << (ostream& cout,Teacher& par)
{
	cout<<par.age<<"\n"<<par.name<<endl;
	return 	cout;
}
int main()
{
	Teacher T1;
	cout<<T1<<endl;
}

!欢迎各位指出不足之处


猜你喜欢

转载自blog.csdn.net/qq_41003024/article/details/80219018
今日推荐