重载=号能不能实现这样的功能?

shiningstar 2002-05-13 10:04:32
比如一个类的实例a
我可以通过重载=号实现:
a=somesymbol;
可不可以实现:
somesymbol=a;

望指教。谢谢
...全文
63 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jerry921 2002-05-14
  • 打赏
  • 举报
回复
to: Muf(沐枫)
>Class1 __class1 = __class2; //此处调用的是复制构造函数>
>//它与下面的形式是等价的:
>Class1 __class1(__class2);
你把那个_class2换成一个整型或其它类型变量也是一样的,我的说法可能有问题,就是你这种意思。
编译器在遇到这种赋值时,就找合适的构造函数做处理,不用再重载=了。
kof99th 2002-05-14
  • 打赏
  • 举报
回复
可以用友元函数实现,Muf(沐枫) 已经说过了 。
Muf 2002-05-13
  • 打赏
  • 举报
回复
To: jerry921(jerry)
>> class=type,用构造函数实现的
构造函数并非赋值运算函数。
例如:
Class1 __class1 = __class2; //此处调用的是复制构造函数
//它与下面的形式是等价的:
Class1 __class1(__class2);

而不处在类型声明语句的“=”号才是赋值运算:
Calss1 __class1;
__class1 = class2;//它调用的是__class1.operator=(...)或operator(Class1& __left, ...)
Muf 2002-05-13
  • 打赏
  • 举报
回复
>>我可以通过重载=号实现:
>>1) a=somesymbol;
>>可不可以实现:
>>2) somesymbol=a;

对于运算号(包括其它二元运算符)重载,有两种实现方式:成员函数重载和友元(friend)函数重载。
对于1)来说,这两种实现方式都可以。
但对于2)来说,就只有友元(全局)函数可以做到。
类似于<< >>这两个ios标准的运算符。对于一个类型,想要实现通过cout输出到屏幕,就只有重载<<友元了。
------------------------------------------
友元赋值运算符形式如下:
T1& operator=(T1& a, const T2& b)
记得在T1中说明该函数为友元(friend)
成员赋值运算符形式如下:
T1& T1::operator=(const T2& b)


shiningstar 2002-05-13
  • 打赏
  • 举报
回复
具体形式怎么写?
谢谢
晨星 2002-05-13
  • 打赏
  • 举报
回复
重载类型转换符,打个比方,如果somesymbol是int型的,就要重载int转换符。
jerry921 2002-05-13
  • 打赏
  • 举报
回复
class=type,用构造函数实现的,
比如
classs abc
{
public:
abc(int a);
....
}
abc aa;
aa=3;
就是如此;
而int b=aa就要重载=了。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧