运算符重载为友元函数,或者普通函数

重载为友元函数时,一般先在类内用friend关键字声明,然后在类外具体实现(具体实现时不需friend,也不需类名)

重载为普通函数时,直接在类外给出函数实现即可(也不需要类名);

二者的区别在于友元函数对类的数据成员有直接获取权限,而普通函数还要通过类的接口访问数据成员。

还有一种是运算符重载为类的成员函数。同友元类似,成员也有直接访问私有数据成员的权限。

那么什么时候重载为成员,什么时候重载为友元呢?

时间: 2024-10-14 00:56:01

运算符重载为友元函数,或者普通函数的相关文章

C++运算符重载为友元函数学习笔记

初探C++运算符重载学习笔记 在上面那篇博客中,写了将运算符重载为普通函数或类的成员函数这两种情况. 下面的两种情况发生,则我们需要将运算符重载为类的友元函数 <1>成员函数不能满足要求 <2>普通函数又不能访问类的私有成员时 举例说明: class Complex{ double real, imag; public: Complex(double r, double i):real(r), imag(i){ }; Complex operator+(double r); };

对运算符重载和友元函数的例子

以下是博主在学习完运算符重载和友元函数后编写的一个例子,实现一个复数的基本运算.定义的头文件: /****************************************************************** complex.h Defination of the complex ******************************************************************/ #ifndef _complex_ #define _com

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

我们知道,C++中的运算符重载有两种形式:①重载为类的成员函数(见C++运算符重载(成员函数方式)),②重载为类的友元函数. 当重载友元函数时,将没有隐含的参数this指针.这样,对双目运算符,友元函数有2个参数,对单目运算符,友元函数有一个参数.但是,有些运行符不能重载为友元函数,它们是:=,(),[]和->. 重载为友元函数的运算符重载函数的定义格式如下: [cpp] view plaincopy 一.程序实例 [cpp] view plaincopy 1 //运算符重载:友元函数方式 2

运算符重载三种形式(成员函数,友元函数,普通函数)详解

首先,介绍三种重载方式: 1 //作为成员函数重载(常见) 2 class Person{ 3 Private: 4 string name; 5 int age; 6 public: 7 Person(const char* name, int age):name(name),age(age){} 8 bool operator<(const Person& b); 9 10 }; 11 bool Person::operator<(const Person& b) 12 {

运算符重载和友元函数

1. 运算符重载 c++允许将运算符重载扩展到用户定义的类型,例如:允许使用+将两个对象相加,编译器将根据操作数的数目和类型决定使用哪种加法定义,重载运算符可以使代码看起来更加自然. 例:计算时间,一个运算符重载的实例: class Time { private: int hours; int minutes; public: Time() {} Time(int hours, int minutes) { this->hours = hours; this->minutes = minute

运算符重载和友元

重载 函数重载: 在同一个作用域中,可以生命几个功能类似的同名函数,但这些同名函数的形式参数(指参数个数,类型或者顺序)必须不同.参见构造函数定义 运算符重载: 举例如下: student student::operator+(student &a) { student sum; sum.weight=weight+a.weight; sum.height=height+a.height; return sum;} 使用方法: Student sum; Student a(40,1.5); St

C++——运算符的重载---以成员函数方式重载---以友元函数方式重载

一.运算符的重载 1.运算符的重载 允许把标准运算符(如+ - * /等运算符)应用于自定义数据类型的对象,可以提高程序的可读性,运算符的重载本质上还是函数重载.运算符仅仅是语法上的方便,它是另一种函数调用的方式,只有在设计涉及的代码更容易写,尤其是更容易读的时候才有必要重载. 2.实现运算符重载的方式 类的成员函数 友元函数(即类外的普通函数) 3.运算符重载的原则: 不能重载的运算符有5个:  .  .*  ?: ::  sizeof 运算符重载不允许发明新的运算符 不能改变运算符操作对象的

初步理解[函数重载]和[运算符重载]&#183;转

作者:黄兢成链接:https://www.zhihu.com/question/23407045/answer/24543450来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 很多疑问都是想不通那东西具体用于什么地方. 比如我初学 C++ 时,早就知道指针实际就是某个变量的地址,就是不知道具体怎么用.这感觉就仿佛学数学,我知道某定理,也知道某定理的证明是对的,但我就是不知道这东西有什么用.直到学数据结构,接触到链表,才突然明白指针. 所以语法只是初步,更重要的是要

第十章 运算符重载

第十章 运算符重载 1.运算符重载的方法 (实质:函数重载) *一般格式: 函数类型名operator 运算符名称(参数表){函数体:} 2.运算符重载的规则 *不允许定义新的运算符 *允许重载的运算符 双目运算符 +(加法)  - (减法)  * (乘法) / (除法)   %(取模) 关系运算符 ==(等于) != (不等)  <   >   <=   >= 逻辑运算符 ||(或)   && (与)  !(非) 单目运算符 + (正)  -(负)   *(指针)