运算符重载
1.一般格式为:
类型名 operator 运算符(形参表){函数体}
运行方式:调用函数进行计算,首先把指定的运算表达式转化为对运算符函数的调用,这个过程 是 在编译中完成的。
意义:使自己定义的类的对象可以进行+—运算
注意: aa c=a+b;//等价aa c=operator +(a,b);
2. 运算符重载的友元形式
friend aa operator +(aa&,aa&);
返回a的类型 aa类对象引用,两个aa类对象相同
有aa的引用,返回,不安全,引入友元。
3.函数形式
aa operator +(aa & a,aa& b)
{aa c;
c.a=a.a+b.a;
c.b=a.b+b.b;
return(c); }
普通的外部函数,
4. 运算符
不是所有的运算符都可以被重载,除“.”(成员选择符)、“.*”(成员对象选择符)、“->*(成员指针选择符)”、“::”、“?:”、“sizeof”外)都可以被重载。
5. 运算符重载函数为成员函数
aa operator +(aa& b)
{aa c;
c.a=this->a+b.a; c.b=this->b+b.b;
return(c);
}
This指针,把a传递给成员函数
a+i 可以用成员函数
i+a 不可用成员函数
要求成员函数第一个操作对象是自定义类型
6. 赋值运算符重载
拷贝构造函数和赋值操作符都是用来拷贝一个类的对象给另一个同类型的对象。
void fn(A a)
{
A na=a; //拷贝构造函数:将一个对象拷贝到另一个新对象
A b;
b=a;}//赋值运算符:将一个对象为另一个已经存在的对象赋值
7. 前自增量运算符应该返回引用
aa & operator ++();
aa & aa::operator ++()
{ a=a+1; b=b+1; return(*this);}
void main()
8. 自增量操作运算符的友元形式
friend aa & operator ++(aa &);
friend aa operator ++(aa &,int);
9. 类型转换运算符声明的形式:
operator 类型名();
没有参数,没有返回类型,(其返回类型由函数名字指定)但是函数体中必须包含return语句。
10. 防止转换的二义性:
operator double();
operator float();
11.注意
(1)运算符重载时参数个数不可以超过原来数目
aa operator +(aa & a,aa & b,aa & c);
aa c=operator +(a,b,a);
(2)不提倡改变运算符的含义
aa operator +(aa& a,aa& b)//
(3)运算符重载时参数类型不能全为基本类型,至少有一个操作对象是自定义类型
至少有一个操作对象是自定义类型,参数都是基本类型时不能重载.
aa operator +(int& a,int & b)
(4)只能是成员的运算符:(系统为类提供的)=、()、[ ]、-〉
只能是友元的运算符:(cout是其它类的对象)cout<<、cin>>
既可以友元也可以成员的:(定义者提供)、+、-等
网友评论