重运算符用成员函数还是友元函数

转载 2013年12月04日 20:49:41

从一个二级题来看成员函数重载运算符和友元函数重载运算符

先上题:下列运算符都可以被友元函数重载的是:

A)=,+,-,\

B)[],+,(),new

C)->,+,*,>>

D)<<,>>,+,*

正确答案为D

我们知道,在运算符重载,友元函数运算符重载函数与成员运算符重载函数的区别是:友元函数没有this指针,而成员函数有,因此,在两个操作数的重载中友元函数有两个参数,而成员函数只有一个。

因此,我们可以总结如下:

1.对双目运算符而言,成员函数重载运算符的函数参数表中只有一个参数,而用友元函数重载运算符函数参数表中含有两个参数。
  对单木运算符来说,成员函数重载运算符的函数参数表中没有参数,而用友元函数重载运算符函数参数表中含有一个函数。这个问题要搞清楚,有一个this
指针的问题。。。
2.双目运算符一般可以用友元函数重载和成员函数重载,但有一种情况只可以用友元函数重载。
  即:双目运算符左边的变量是一个常量,而不是对象!!!这点很重要的额。

而关于运算符的重载,有以下经验可以记着:

   1.对于单目运算符,建议选择成员函数;
   2.对于运算符“=,(),[],->”只能作为成员函数;
   3.对于运算符“+ =,-=,/=,*=,&=,!=,~=,%=,<<=,>>=”建议重载为成员函数;
   4.对于其他运算符,建议重载为友元函数。

 

那么下面这个题的答案也就很明显了:

将x+y*z中的“+”用成员函数重载,“*”用友元函数重载应该写为:?

答案为:x.operator+(operator*(y,z))

运算符重载函数作为类成员函数与友元函数的区别

运算符重载函数作为类成员函数与友元函数
  • Sharp_Zjf
  • Sharp_Zjf
  • 2016年03月16日 10:49
  • 1977

成员函数、友元函数和一般函数的区别-时间

/* *Copyright (c) 2016 *All rights reserved. *文件名称:test.cpp *作 者:史红浩 *完成日期:2016年...
  • jiaowohaohao
  • jiaowohaohao
  • 2016年05月09日 12:13
  • 1925

流运算符为什么不能重载为成员函数,只能用友元函数重载

一、 为什么operator 如果是重载双目操作符(即为类的成员函数),就只要设置一个参数作为右侧运算量,而左侧运算量就是对象本身。。。。。。 而 >>  或 如果一定要声明为成员函数,只...
  • snowsnowsnow1991
  • snowsnowsnow1991
  • 2015年12月15日 14:22
  • 2380

C++运算符重载(友元函数方式)

我们知道,C++中的运算符重载有两种形式:①重载为类的成员函数(见C++运算符重载(成员函数方式)),②重载为类的友元函数。 当重载友元函数时,将没有隐含的参数this指针。这样,对双目运算符,友元...
  • GarfieldEr007
  • GarfieldEr007
  • 2015年07月10日 11:27
  • 1702

C++中友元函数和成员函数的区别

什么是友元函数:     指某些虽然不是类的成员却能够访问类的所有成员的函数 为什么要使用:     为了使其他类的成员函数来访问该类的私有变量 什么时候使用:     可以用于运算符重...
  • dandanzmc
  • dandanzmc
  • 2013年09月13日 21:24
  • 3311

友元函数(类中的成员函数作为友元函数)

#include using namespace std; class Time { public: Time(int h, int m, int s); friend ...
  • zhedahe
  • zhedahe
  • 2013年09月17日 15:31
  • 542

用类的友元函数,而不是成员函数定义复数类重载运算符+、-、*、/,使之能用于复数的加减乘除

/* *Copyright (c) 2016,烟台大学计算机学院 *All rights reserved. *文件名称:main.cpp *作 者:郭辉 *完成时间:2016年5月23日 *版...
  • guohui5011
  • guohui5011
  • 2016年05月23日 22:44
  • 1176

C++运算符重载函数作为类成员函数和友元函数

例10.2中对运算符“+”进行了重载,使之能用于两个复数的相加。在该例中运算符重载函数operator+作为Complex类中的成员函数。 可能有的读者会提出这样的问题:”+“是双目运算符,为什...
  • u010781856
  • u010781856
  • 2015年04月11日 22:21
  • 1599

使用成员函数、友元函数和一般函数的区别

#include using namespace std; class Time { public: Time(int h,int m,int s):hour(h),minute(m),se...
  • ListeningForever
  • ListeningForever
  • 2016年05月25日 16:43
  • 1752

成员函数,友元函数和一般函数之区别

/* * 程序的版权和版本声明部分 * Copyright (c)2012, 烟台大学计算机学院学生 * All rightsreserved. * 文件名称: object.cpp * 作...
  • CXZHAOYANG12
  • CXZHAOYANG12
  • 2013年04月12日 14:13
  • 2228
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:重运算符用成员函数还是友元函数
举报原因:
原因补充:

(最多只允许输入30个字)