您的位置:首页 > 编程语言 > C语言/C++

C++运算符重载

2011-08-16 16:12 197 查看
对于二元运算符,aa@bb可以理解为aa.operator@(bb),或者理解为operator@(aa,bb)。对于一元运算符,无论它是前缀的还是后缀的,都可以定义为无参数的非静态成员函数,或者定义为取一个参数的非成员函数。对任何前缀一元运算符@,@aa可以解释为aa.operator@()或者operator@(aa)。对任何后缀一元运算符@,aa@可以解释为aa.operator@(int)或者operator@(aa,int)

一个运算符函数必须或者是一个成员函数,或者至少有一个用户定义类型的参数(重新定义运算符new和delete的函数则没有此项要求)

class Tiny

{

char v;

public:

//转换到int的函数,作为转换目标的类型 是运算符名字的一部分,不能作为转换函数的返回值类型而重复写出

operator int() const { return v; }

}

friend声明可以放在类声明中的私用部分或者公用部分,放在哪里都没有关系

通过将构造函数声明为explicit(显示)的方式可以抑制隐式转换。也就是说,explicit构造函数必须显示调用。

函数operator[]()必须是成员函数,operator()()必须作为成员函数,operator->()必须是成员函数

class Ptr

{

X* operator->();

};

void f(Ptr p)

{

p->m = 7; //(p.operator->())->m = 7

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: