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

转载 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))

第八周任务1:方案二:请用类的友元函数,而不是成员函数,完成上面提及的运算符的重载;

//2)方案二:请用类的友元函数,而不是成员函数,完成上面提及的运算符的重载; #include using namespace std; class Complex ...

运算符重载 成员函数及友元函数

c++多态分为静态多态和动态多态。资料上显示静态多态通过模块和函数重载来实现的,动态多态是通过继承、虚函数、指针来实现的。1.首先我们看一看函数重载,它旨在用同名函数来完成相同的基本操作,即使这种操作...

从零开始学C++之运算符重载(一):以成员函数方式重载、以友元函数方式重载

一、运算符重载 运算符重载允许把标准运算符(如+、—、*、/、等)应用于自定义数据类型的对象 直观自然,可以提高程序的可读性 体现了C++的可扩充性 运算符重载仅仅只是语法上的方便,它是另一种函数...

C++运算符重载 成员函数与友元函数

#include using namespace std; class A {     int x,y;     public:     A(int xx,int yy):x(xx),...

项目1-2 请用类的友元函数,而不是成员函数,再次完成上面提及的运算符的重载;

12

C++运算符重载形式——成员函数or友元函数

运算符重载是C++多态的重要实现手段之一。通过运算符重载对运算符功能进行特殊定制,使其支持特定类型对象的运算,执行特定的功能,增强C++的扩展功能。 运算符重载的我们需要坚持四项基本原则:  (1)不...

C++实现输入输出运算符重载、友元函数和成员函数实现复数类Complex

题目要求如下: 1) 基本的构造函数; 2) 成员运算符+、-实现复数的加减运算; 3) 友元运算符+、-实现更合理的加减运算; 4) 运算符实现复数类的输出输入。...

成员函数和友元函数 完成二元和一元运算符重载(进阶1)

二元运算符重载: 全局函数: #include using namespace std; class Complex{//复数类 private: int a; int b...
  • x_y_q_
  • x_y_q_
  • 2016年08月13日 23:02
  • 432

从零开始学C++之运算符重载(一):以成员函数方式重载、以友元函数方式重载

一、运算符重载 运算符重载允许把标准运算符(如+、-、*、/、等)应用于自定义数据类型的对象 直观自然,可以提高程序的可读性 体现了C++的可扩充性运算符重载仅仅只是语法上的方便,它是另一种函数...

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

/* *Copyright (c) 2016,烟台大学计算机学院 *All rights reserved. *文件名称:main.cpp *作 者:郭辉 *完成时间:2016年5月23日 *版...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:重运算符用成员函数还是友元函数
举报原因:
原因补充:

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