首页 > 其他分享 >运算符重载及与友元

运算符重载及与友元

时间:2024-01-14 23:31:39浏览次数:26  
标签:友元 name Person ++ ob 运算符 重载 num operator

友元基本概念:

friend关键字只出现在声明处,一个函数或者类 作为了另一个类的友元 那么这个函数或类就可以直接访问另一个类的私有数据。

运算符重载:

语法:定义重载的运算符就像定义函数,只是该函数的名字是operator@,这里的@代表了被重载的运算符 (例: operator<< ) 思路:1、识别运算符左边的是不是自己定义的类的运算对象 类的对象:推荐使用成员函数实现 (因为可以使用this ,可以少一个形参),当然也可用全局 其他:只能使用全局函数实现 2、判断形参个数

以下是样例

#include <iostream>
#include <string>
using namespace std;
class Person
{
friend ostream& operator<<(ostream &out, Person ob);
friend istream& operator>>(istream &in, Person &ob);
private:
int num;
string name;
float score;
public:
Person(){}
Person(int num,string name,float score):num(num),name(name),score(score){}
//成员函数重载+运算符
Person operator+(Person &ob)
{
Person tmp;
tmp.num = num+ob.num;
tmp.name = name+ob.name;
tmp.score = score+ob.score;
return tmp;
}
//成员函数重载==运算符
bool operator==(Person &ob)
{
if(num==ob.num && name==ob.name && score==ob.score)
return true;
return false;
}
};
//全局函数重载operator<<
ostream& operator<<(ostream &out, Person ob)
{
out<<ob.num<<" "<<ob.name<<" "<<ob.score<<endl;
return out;
}
//全局函数重载operator>>
istream& operator>>(istream &in, Person &ob)
{
in>>ob.num>>ob.name>>ob.score;
return in;
}
int main(int argc, char *argv[])
{
Person lucy(100,"lucy", 88.8);
Person bob(100,"lucy",88.8);
if(lucy == bob)
{
cout<<"相等"<<endl;
}
else
{
cout<<"不相等"<<endl;
}
return 0;
}

重载++ — 运算符

重载的++和–运算符有点让人不知所措,因为我们总是希望能根据它们出现在所作用对象的前面还是后

面来调用不同的函数。解决办法很简单,例如当编译器看到++a(前置++),它就调用operator++(a),当编

译器看到a++(后置++),它就会去调用operator++(a,int).

++a(前置++),它就调用operator++(a),

a++(后置++),它就会去调用operator++(a,int)

–a(前置–),它就调用operator–(a),

a–(后置–),它就会去调用operator–(a,int)

友元使用中需要注意的问题:

1、友元关系不能被继承。

2.友元关系是单向的,类A是类B的朋友,但类B不一定是类A的朋友。

3.友元关系不具有传递性。类B是类A的朋友,类C是类B的朋友,但类C不一定是类A的朋友

以下是一个样例:整个类作为另一个类的友元

<strong>class Room; // 向前声明 只能说明类名称</strong>,
class goodGay
{
public:
    void visiting01(Room &room);<strong> //向前声明是为了这里不报错</strong>
    void visiting02(Room &room);
};
class Room
{
    friend class goodGay;

private:
    string bedRoom; // 卧室
public:
    string setingRoom; // 客厅
public:
    Room(string bedRoom, string setingRoom)
    {
        this->bedRoom = bedRoom;
        this->setingRoom = setingRoom;
    }
};
<strong>void goodGay::visiting01(Room &room)</strong> /<strong>/这个函数要在全局实现,与上述同理</strong>
{
    cout << "访问了" << room.setingRoom << endl;
    cout << "访问了" << room.bedRoom << endl;
}
void goodGay::visiting02(Room &room)/<strong>/这个函数要在全局实现,与上述同理</strong>
{
    cout << "好基友访问了" << room.setingRoom << endl;
    cout << "好基友访问了" << room.bedRoom << endl;
}
int main(int argc, char *argv[])
{
    Room room("卧室", "客厅");
    goodGay ob;
    ob.visiting01(room);
    ob.visiting02(room);
    return 0;
}

标签:友元,name,Person,++,ob,运算符,重载,num,operator
From: https://blog.51cto.com/u_14882565/9242849

相关文章

  • 运算符
    运算符的介绍1.算术运算符+,-,*./,%,++,--,重点讲解%、++自增:++作为独立的语句使用:前++和后++都完全等价于i=i+1;作为表达式使用前++∶++i先自增后赋值后++;i++先赋值后自增--,+、-、*是一个道理,完全可以类推。对于除号"/",它的整数除和小数除是有区别的:整数......
  • 关于二进制的原码、补码和反码,以及表示范围、常见位运算符和进制转换的理解与简述
    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)https://www.cnblogs.com/cnb-yuchen/p/17963363出自【进步*于辰的博客】参考笔记一,P3.13、P5.1;笔记三,P43.1/3、P44.1。注:我暂且没有整理关于二进制、原码、补码和反码等概念的理论,本文中的阐述都基于我对相应......
  • 基本运算符
    【一】参考网站参考网站(菜鸟教程):https://www.runoob.com/python/python-operators.html【二】算数运算符python支持的算数运算符与数学上计算的符号使用是一致的我们以x=9,y=2为例来依次介绍它们【1】加法运算符+x=9y=2result=x+yprint(result)#输出:1......
  • Python 运算符
    数据转换在日常开发中使用频次也是非常高的,了解一下隐式类型转换和显示类型转换。隐式类型转换:我们对两种不同类型的数据做运算,例如整数类型和浮点型运算,这时候我们需要把整数转换为浮点型,避免数据丢失。显式类型转换:在显式类型转换中,用户会将对象的数据类型转换为所需的数据类型。......
  • 无涯教程-LISP - 运算符
    运算符是一个符号,告诉编译器执行特定的数学或逻辑操作。LISP允许对数据进行大量操作,并由各种函数,宏和其他构造支持。允许对数据进行的操作可以归类为-算术运算比较操作逻辑运算按位运行算术运算下表显示了LISP支持的所有算术运算符。假设变量A=10,变量B=20,然后-运算符......
  • 类模板和友元
    友元内部实现#include<iostream>#include<stdio.h>#include<stdlib.h>#include<algorithm>#include<numeric>template<classNameType,classAgeType>classMark{ friendvoidprintMaker(Mark<NameType,AgeType>&p)......
  • Powershell运算符使用方法-04
    Powersehll使用运算符时,需要注意以下几个方面:数据类型:不同的运算符适用于不同的数据类型。确保进行运算的操作数具有适当的数据类型,以避免意外结果或错误。例如,算术运算符适用于数字类型,但不适用于字符串类型。空值处理:某些运算符对于空值(null)的处理方式可能不同。在比较运算中,空值......
  • 友元函数与运算符重载
    友元函数友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数。类授予它的友元特别的访问权。通常同一个开发者会出于技术和非技术的原因,控制类的友元和成员函数(否则当你想更新你的类时,还要征得其它部分的拥有者的同意)。友元函数是一个不属于类成员的函数,但它可以访问该......
  • python里面什么是身份运算符
    Python中的身份运算符是一种用于比较对象是否具有相同的内存地址的运算符。在Python中,身份运算符由is和isnot两个关键字组成。本文将详细介绍Python中的身份运算符及其使用方式。is关键字在Python中,is是一个用于比较两个对象是否具有相同内存地址的关键字。当is运算符用于比较两个......
  • 运算符和流程控制
    5.运算符:在Java中,运算符用于执行各种操作,例如算术运算、关系运算和逻辑运算。让我们一步步学习这些运算符的用法。步骤5.1:算术运算符算术运算符用于执行基本的数学运算。以下是一些常见的算术运算符:inta=5;intb=2;intsum=a+b;//加法intdifference=a-b;//......