运算符重载基础
- 概念:对已有的运算符重新定义,赋予其另一种共功能,以适应不同的数据类型,以operator作为关键字;
- 目的:运算符重载的目的一般是为了自定义数据类型的运算;
- 重载一般形式:类型 operator 重载的符号 (参数);
- 原则:
- 不能创造新的运算符;
- 不能改变运算符的优先级和结合性;
- 重载运算符的函数不能有默认参数;
- 重载的运算符必须和用于定义的自定义类型对象一起使用,只有应该有一个是类对象,即不允许参数全部是c++的标准类型;(这些是我笔记上记得,如有误还请不吝赐教)
- (二级考点)只能通过成员函数重载的运算符有四个,分别是:
- =:赋值运算符;
- ():函数调用运算符;
- []:下标运算符;
- ->:通过指针方位类成员的运算符;(当时笔记上记的是这个名字,如有误还请不吝赐教)
- 五个不能重载的运算符:
- .:成员访问运算符;
- *:成员指针访问运算符;
- ‘::’:域运算符;(单引号里面的才是哟)
- sizeof:长度运算符;
- " ? : ":条件运算符;
- 有的重载或者别人写函数中会看到 & 或者 * 这两个符号(例如:类型& operator 某运算符 ();),一个是返回引用,一个是函数指针,关于它们的作用不做叙述,可自行查阅相关资料;
重载’-'运算符的简单例子
class XXX
{
public:
//类型1
friend XXX operator - (XXX &x1, XXX &x2)//友元可访问保护数据成员和私有数据成员
{
xxx x3;
x3.a=x1.a-x2.a;
return x3;
}
//类型2
int operator - ()
{
return this->a-this->b;
}
protected:
int a;
int b;
}
重载’+'运算符的简单例子
//与'-'运算符相似,或者说一摸一样;不再做叙述
重载’long’运算符例子
//重载
operator long() const { return this->a/this->b;}
//使用
XXX x1;
cout<
重载流运算符’>>’
//一般形式如下,但是只能作为非成员函数重载
istream& operator >> (istream &, 类名 &);
//使用时要作为非成员函数重载
friend istream& operator >> (istream &in, xxx &x1)
{
in>>x1.a>>x1.b;
return in;
}
//使用
XXX x1;
cin>>x1;
- 文章并没有细致的叙述,各位可参考文章自己动手写一遍,多动手才是王道;
- 文章仅作为自己的笔记和参考,如有纰漏,还请不吝赐教;