2017.9.22
今天学习的是运算符的重载:
运算符重载:
使用运算符重载的一般格式为:
类型名 operator 运算符(形参表)
{ 函数体 }
其中operator是关键字,类型名为重载运算符的返回类型,即运算结果返回类型。
例:
下面是运算符重载的友元函数:
class aa{ //运算符重载的友元形式
float a; float b;
public:
float &aaa(){return(a);}
float &bbb(){return(b);}
friend aa operator +(aa&,aa&);};
aa operator +(aa & a,aa& b)
{aa c;
c.a=a.a+b.a;
c.b=a.b+b.b;
return(c); }
void main()
{ aa a,b;
a.aaa()=1; a.bbb()=2;
b.aaa()=3; b.bbb()=4;
aa c=a+b;//等价aa c=operator +(a,b);
cout<<c.aaa()<<endl<<c.bbb();}
aa c=a+b;//等价aa c=operator +(a,b);
aa c=a+b;//等价aa c=operator +(a,b);
aa c=a+b;//等价aa c=operator +(a,b);
aa operator +(aa& a,aa& b)//不提倡改变运算符的含义
运算符重载时参数个数不可以超过原来数目
运算符重载时参数类型不能全为基本类型,至少有一个操作对象是自定义类型
在C++中几乎所有的运算符(除“.”(成员选择符)、“.*”(成员对象选择符)、“->*(成员指针选择符)”、“::”、“?:”、“sizeof”外)都可以被重载。只能重载C++中已有的运算符,不允许创建新的运算符.
赋值运算符重载
拷贝构造函数和赋值操作符都是用来拷贝一个类的对象给另一个同类型的对象。
void fn(A a)
{ A na=a; //拷贝构造函数:将一个对象拷贝到另一个新对象
A b;
b=a;}//赋值运算符:将一个对象为另一个已经存在的对象赋值
编译器提供默认的拷贝构造函数和赋值运算符的运作机制。
就是将对象中的每个数据成员拷贝到目标对象相应的数据成员中。
若类的数据成员中有指向动态分配空间的指针,通常定义拷贝构造函数,此时,应重载赋值运算符。
类型转换运算符声明的形式:
operator 类型名();
没有参数,没有返回类型,(其返回类型由函数名字指定)但是函数体中必须包含return语句。
只能作为成员函数。