c – 运算符重载(朋友和成员函数)
使用friend关键字的操作符重载和类中的成员函数有什么区别?
而且,一元运算符重载(即作为一个朋友而不是一个成员函数)的情况有什么区别? 解决方法
Jacob是正确的…在类中声明的一个朋友的功能可以访问该类,但它不在类的内部,而其他人都可以访问它.
对于不是类的成员的操作符重载(也称为空闲函数,它可能是一个朋友,或者可能不是),参数与操作数相同.对于一个类的成员,第一个操作数是“隐含参数”,这就是这个. 隐含的参数与以下几种方式的自由函数的第一个参数不同: >它的类型是reference-to-class,而free函数可以为其第一个参数声明任何类型. 对于一元,二进制或n-ary(对于operator()),情况是相同的. 成员特权突变:改变第一个操作数(例如=,=,前缀)的操作符应作为成员函数实现,并且应该专门实现所有重载的内容. Postfix是二等公民;它被实现为Obj ret = * this;这个;返回.请注意,这有时扩展到复制构造函数,它可能包含* this = initializer. 通勤者自由:只有交换操作符(如/)应该是自由职能;所有其他操作符(如一元任何东西)都应该是会员.交换运算符固有地制作对象的副本;它们被实现为Obj ret = lhs; ret @ = rhs;返回其中@是交换运算符,lhs和rhs分别是左侧和右侧参数. C友谊的金色规则:避免友谊.朋友污染了设计的语义.重载推论:如果您遵循上述规则,重载过程很简单,那么朋友是无害的.有趣的样板重载定义允许将它们放在类{括号中. 请注意,一些运算符不能是免费函数:=,– > []和(),因为标准在第13.5节中具体说明了这一点.我认为这一切都是…我想到一元&和*也是,但我显然是错误的.他们应该永远作为成员超载,但只有仔细思考! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |