一个运算符重载函数被定义为成员函数或友元函数后,在定义方式、解释方式和调用方式上有何区别?可能会出现什么问题?请用一个实例说明之。
运算符重载
定义
解释
调用
成员函数
Obj& operator op();
Obj operator op(object);
Obj.operator op()
ObjL.operator op(ObjR)
Obj op 或 op Obj
ObjL op ObjR
左操作数通过this指针指定,右操作数由参数传递
友员函数
friend Obj & operator op(Obj &);
friend Obj operator op(Obj,Obj);
operator op(Obj)
operator op(ObjL,ObjR)
操作数均由参数传递
可能会出现的问题:
(1)运算符的左右操作数不同,须用友员函数重载;
(2)当运算符的操作需要修改类对象状态时,应用成员函数重载。
(3)友员函数不能重载运算符= () [] ->
必须要用友员函数重载的运算符>> <<
程序略。
这道题你会答吗?花几分钟告诉大家答案吧!
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题
运算符重载
定义
解释
调用
成员函数
Obj& operator op();
Obj operator op(object);
Obj.operator op()
ObjL.operator op(ObjR)
Obj op 或 op Obj
ObjL op ObjR
左操作数通过this指针指定,右操作数由参数传递
友员函数
friend Obj & operator op(Obj &);
friend Obj operator op(Obj,Obj);
operator op(Obj)
operator op(ObjL,ObjR)
Obj op 或 op Obj
ObjL op ObjR
操作数均由参数传递
可能会出现的问题:
(1)运算符的左右操作数不同,须用友员函数重载;
(2)当运算符的操作需要修改类对象状态时,应用成员函数重载。
(3)友员函数不能重载运算符= () [] ->
必须要用友员函数重载的运算符>> <<
程序略。