C++运算符重载中 重载为类的成员函数和重载为类的友元函数 的区别是什么?

作者&投稿:豆萱 (若有异议请与网页底部的电邮联系)
运算符重载和友元函数的使用区别【c++】~

这段话的意思也就是,除了你要访问类的私有成员或保护成员才将非成员函数的重载运算符声明为友元函数(因为只有将非成员函数的重载运算符声明为友元函数时。后面几句我也不清不楚的,真是奇怪,既然不访问私有成员或保护成员,声明为友元函数时,也不会让这个函数随类改变啊。。反正就是就是理解为除了你要访问类的私有成员或保护成员才将非成员函数的重载运算符声明为友元函数

重载双目运算符可以用友元或者成员函数,但是两者有区别例如用成员函数重载了 + 之后(假设赋值运算符 = 已经被重载)ob = ob + 100是被支持的,而ob = 100 + ob就是不被允许的这种情况下就要使用友元函数来对运算符重载以避免不必要的麻烦

类的成员函数定义就在类里面,但是类的友元函数定义在其他类里面。
调用的函数不在同一个类中,它们定义也不在同一个类中。

友员函数是指在类内说明()也可定义的一friend 说明的 其可以像成员函数一样访问类的各个成员但是其不属于类因此其不能用this访问列如
friend void sum(int ,int);友员函数没有this指针;其运算符重载

友元函数:具有与类成员函数相同访问权利的“非成员函数”,他可以访问类的私有和保护成员——通过该类对象、对象指针或其引用。
简单且一般的说:运算符重载为类的成员函数,他的参数个数会比“该运算符的操作符”少一,而运算符重载为友元函数时,他的参数与其操作个数是相同的。


合肥市19344745108: C++运算符重载中 重载为类的成员函数和重载为类的友元函数 的区别是什么? -
诺屠欣可: 类的成员函数定义就在类里面,但是类的友元函数定义在其他类里面. 调用的函数不在同一个类中,它们定义也不在同一个类中.

合肥市19344745108: C++中,重载运算符的函数可以定义为类的成员函数,但是书上说在使用此重载运算符的时候,运算符左边必 -
诺屠欣可: 这个是单目的“++”,前缀写法,前面加上运算符的话,要用空格隔开,并且那个运算符也要有适当的运算符函数可以调用(或者说,是已经被这个表达式中数据类型重载了才行)

合肥市19344745108: c++中为什么运算符的重载要与类联系在一起? -
诺屠欣可: 其实运算符重载就是函数重载,只是名字叫运算符函数,但是有些限制,重载运算符函数至少要有一个自定义类型才行(这个就是类了),你想想,如果可以将运算符函数的参数都是非自定义类型,比如int + int,结果如何,本来3+5 为8,经过重载后的结果不是8,这样的程序没法理解,而运算符重载的出发点就是增加可读

合肥市19344745108: C++中重运算符是否都可以重载?是否都可以重载成类的成员函数?是否都可以重载成类的友元函数? -
诺屠欣可: 1.不能重载的操作符:sizeof . .* :: ?: typeid const_cast dynamic_cast reinterpret_cast static_cast2.都可以重载成类的成员函数(除去1里面讲的) 有的必须重载成类的成员函数:= () [] ->3.可以重载成类的友元函数除去(2里面讲的)= () [] ->和不能作为重载的操作符(1里讲的)

合肥市19344745108: C++里面,当运算符重载为类的成员函数时,函数的参数比原来的操作数少一个,怎么理解? -
诺屠欣可: 因为当前类的实例就当做原来两个操作数中的左操作数了.所以看起来像是省略了一个

合肥市19344745108: c++中的运算符重载主要用来做什么? -
诺屠欣可: 主要是用来使对象之间可以做运算操作的. 比如,你定义了一个类的对象a而这个对象中有一个数据,又定义了一个b对象也有一个数据,你须要使用a+b来计算这两个对象中数据的合,就须要运算符重载. 运算符重载不光是可以重载四则运算的.也可以重载 []下标运算符,<< >>输入输出运算符等等. 运算符重载主要的用途只是为了让运算符其前后跟后的对象可以直接像对象内的数据一样运算

合肥市19344745108: 重载为类的成员函数 -
诺屠欣可: 重载是可使函数、运算符等处理不同类型数据或接受不同个数的参数的一种方法.在重载及函数模板重载里,编译器选择函数,要经过以下三步,这个过程称为重载解析.第一步:创建候选函数列表,其中包含有与被调函数名称相同的函数与模板函数.第二步:使用候选函数列表创建可行函数列表.这些都是参数数目正确的函数.第三步:确定是否有最佳可行的函数.如果有,则使用.

合肥市19344745108: 请教各位高手,C++中,运算符重载为类成员函数:(返回类型)operator(运算符){(参数表)} 中,返回类型指什么? -
诺屠欣可: 运算结果的类型 比如,如果重载的运算符是==,那么返回类型就是bool 补充:如果把运算符重载为类成员函数的话,就不需要那样写 比如 class XXX { private:...public:...XXX operator + (XXX&);...}; 如果不是重载为类成员,就得这样:class XXX {..}; XXX operator + (XXX&,XXX&);

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网