`
缥缈孤鸿
  • 浏览: 41999 次
  • 性别: Icon_minigender_1
  • 来自: 大连
最近访客 更多访客>>
社区版块
存档分类
最新评论

元算符重载时友元函数和成员函数的选择

    博客分类:
  • C++
阅读更多
一般情况下,单目运算符最好重载为类的成员函数;双目运算符则最好重载为类的友元函数。
因此复数类的+-*/操作符应重载为友元函数。
一些双目运算符不能重载为类的友元函数:=、()、[]、->。
类型转换函数只能定义为一个类的成员函数而不能定义为类的友元函数。
若一个运算符的操作需要修改对象的状态,选择重载为成员函数较好。
若运算符所需的操作数(尤其是第一个操作数)希望有隐式类型转换,则只能选用友元函数。
当运算符函数是一个成员函数时,最左边的操作数(或者只有最左边的操作数)必须是运算符类的一个类对象(或者是对该类型的一个引用)。如果左边的操作数必须是一个不同类的对象,或者是一个基本数据类型的对象,该运算符函数必须作为一个友元函数来实现。
运算符重载为类的成员函数,他的参数个数会比“该运算符的操作符”少一,而运算符重载为友元函数时,他的参数与其操作个数是相同的。
当需要重载运算符的运算具有可交换性时,选择重载为友元函数。
分享到:
评论

相关推荐

    C++运算符重载友元函数实例

    在C++编程语言中,运算符重载是允许我们为已存在的运算符赋予新的含义或功能的一种机制。这个实例将探讨如何通过成员函数和非成员函数两种...通过练习和理解这些例子,你将更好地掌握C++中运算符重载和友元函数的使用。

    c++中运算符重载精讲

    C++中有两种方式来重载运算符:作为类成员函数和作为友元函数。 1. 作为类成员函数的运算符重载 当运算符重载函数作为类成员函数时,需要在类中声明和定义该函数。例如,想要重载加法运算符,就需要在类中声明一个...

    课程思政-c++语言程序设计

    - 在本章前面的小节中,学生已经学习了运算符重载的基本概念、方法和规则,具备进一步学习重载为成员函数和友元函数的能力。 - **学生思想状况分析**: - 强调课程的重要性和学习的意义,引导学生认识到大学学习对...

    实验7 多态性和运算符重载.doc

    运算符重载的形式有两种,重载为类的成员函数和重载为类的友元函数。 在运算符重载为类的成员函数时,对于前置单目运算符 S,如果要重载 S 为类 X 的成员函数,用来实现表达式 S xobj,其中 xobj 是类 X 的对象,...

    运算符重载练习题参考.pdf

    本篇文章是对C++中运算符重载的练习题进行讲解。运算符重载是C++的一个重要特性,它允许对已有的运算符赋予额外的功能,使其能够用于自定义类型对象。下面我们将根据给定文件内容提取并详细说明相关的知识点。 ### ...

    c++运算符重载

    成员函数和友元函数在重载运算符时各有优势,成员函数可以直接访问类的私有成员,而友元函数可以跨越对象的封装边界,提供更灵活的实现方式。在实际编程中,正确地选择和使用这两种方式是提高代码效率和可读性的重要...

    Struct和运算符重载---详细

    在`struct`中重载运算符通常有两种方式:成员函数和友元函数。成员函数作为`struct`的成员,可以直接访问`struct`的所有成员;友元函数则不作为`struct`的成员,但可以访问`struct`的私有和保护成员,提供了一种灵活...

    C++运算符重载教学和编程中易被忽视的问题

    根据给定的文章摘要和部分内容,本文将详细探讨C++中运算符重载教学与编程过程中容易被忽视的一些关键问题,并提出有效的解决方案。此外,本文还会深入讨论如何在运算符重载时考虑到用户的使用习惯、方便性和继承性...

    C++给学生习题第7章练习题.docx

    【知识点详解】 1. 运算符重载:C++中的...通过以上知识点,我们可以理解C++中运算符重载的基本原理和实践方法,以及如何在实际编程中应用这些概念。在编写类时,正确地重载运算符可以增强代码的可读性和表达力。

    C++ 部分运算符重载程序

    二、左移运算符重载 左移运算符 () 只能重载为局部函数,因为它需要访问类的私有成员变量。左移运算符通常用于输出流操作,例如: ```cpp class MyClass { public: friend ostream& operator(ostream& os, const ...

    P121~126C++类和对象C++运算符重载学习笔记.docx

    C++运算符重载学习笔记 C++类和对象是面向对象编程的基础概念。运算符重载是C++中的一种重要机制,允许开发者重新定义已有的运算符,赋予其新的功能,以适应...4. 左移运算符重载配合友元可以实现输出自定义数据类型。

    C++重载运算符的几类使用方法.pdf

    - **友元函数**:有时为了实现某些运算符重载,可能需要将函数声明为类的友元,以便能够访问私有成员。 总的来说,运算符重载是C++中提高代码可读性和表达力的重要工具,它使得我们可以用自然的方式处理自定义类型...

    C++的iostream标准库介绍以及对左移与右移运算符的重载.docx

    "`实际上调用了`ostream`类中为`char*`类型重载的`operator友元函数。由于这个函数返回的是流对象的引用,可以连续调用,所以可以实现多条输出语句的链式调用,如`cout , " !" ;`。 对于输入,`cin >> a`调用了为...

    C++的iostream标准库介绍以及对左移与右移运算符的重载.pdf

    对于输出,`运算符被重载为友元函数,接受一个流对象和要输出的数据。例如,`cout , World!"`实际上是调用了`ostream& operator(ostream &temp, const char* source)`这个重载函数,它将字符串写入输出流。由于返回...

    程序设计实验报告-021

    通过实验,学生可以深入理解如何使用成员函数和友元函数来重载运算符,以及这些重载运算符如何在实际问题中提高代码的可读性和效率。此外,这个实验也强调了面向对象编程中类的设计和对象的交互,以及如何利用这些...

    c++运算符重载矩阵运算.pdf

    在提供的代码片段中,可以看到加、减、乘运算符的友元函数声明,而赋值运算符和转置运算符则是作为成员函数实现的,这是因为赋值运算符需要修改对象的状态,而转置运算符可以视为返回新对象的操作。 在详细设计部分...

    200210高等教育面向对象程序设计C++自考[借鉴].pdf

    18. 静态成员函数、友元函数、构造函数和析构函数中,静态成员函数不是对象的一部分,不属于成员函数。 19. 在Location类中,私有成员是`int length`和`int height`。 20. 类的私有成员只能被其成员函数和友元访问。...

    C++复习题带答案

    11. **友元函数**:友元函数允许非成员函数访问类的私有和保护成员。 12. **构造函数与继承**:构造函数不会被继承,每个类都需要自己定义构造函数。 13. **动态绑定与多态**:动态绑定通过虚函数实现,允许多态性...

    C++ 重载例子大全

    通过这个例子,我们可以学习到C++中运算符重载的基本原理和实践方法,这对于理解C++的面向对象特性及其在实际编程中的应用至关重要。同时,这也展示了如何通过自定义类型来增强语言的表达力,使得代码更符合数学上的...

Global site tag (gtag.js) - Google Analytics