18.类中重载运算符与友元

上次节中学习了如何在类中重新定义赋值(=)运算符,实际上在一个自定义类中除了赋值(=)运算符外,类的对象是不可以直接使用运算符的,比如你在main函数中写这样的代码会报错:

如果想解决这些报错问题,需要在类中重载这些运算符。

18.1 重载

在表达式中使用

首先在类中声明要重载的运算符:< ,然后去函数中实现具体的比较规则。

声明重载运算符函数的代码要求按照固定的格式:必须在运算符

18.2 重载+运算符

如同上面的

18.3 重载<>运算符

之前我们可以使用C++ 的流提取运算符 >> 和流插入运算符 << 来输入和输出内置的一些数据类型,实际上我们也可以重载流提取运算符和流插入运算符来操作自定义的数据类型。

在这里,有一点很重要,我们需要把运算符重载函数声明为类的友元函数,这样我们就能不用创建对象而直接调用函数了。

重载运算符之后,在main函数中直接通过cout输出对象的数据,或cin输入对象的数据。

18.4 友元函数

类的private的成员只有类的成员函数才有权直接访问,外部函数无访问权限。但是类中有一种特殊的函数——友元函数,有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数在类的定义中出现过,但友元函数并不是类的成员函数。

如果要声明一个函数为类的友元函数,需要在类定义中使用关键字 friend,函数的参数必须有一个类对象参数,因为只有通过对象才能访问私有或保护的成员:

18.5 友元类

友元也可以是一个类,该类被称为友元类。如果声明一个类为友元,那整个友元类的所有成员都是这个类的友元。

如果要声明友元类,需要在类定义中使用关键字 friend,如下所示:

友元类的任何成员函数都可以访问类的成员。

vs2003 局部友元访问私有不可访问_C++ 类:重载运算符与友元相关推荐

  1. 友元函数可以访问私有成员吗_C++的友元函数和友元类

    C++使用类对数据进行隐藏和封装,类的数据成员一般定义为私有成员,而将提供类与外界通讯接口的成员函数定义为公有的. C++类成员的三种访问权限: public:可以被该类中的函数.子类的函数.友元函数 ...

  2. 把类的成员函数声明为友元函数,但不能访问私有成员的原因和解决办法

    定义类X,类Y,在类X中声明类Y的成员函数g()为类X的友元函数 常见的几种错误写法及原因: 错误写法1 class Y; class X {public:X(int i) :i(i) {}frien ...

  3. 友元函数、友元类、访问私有数据成员、友元关系[C++]

    友元函数(friend function) 1. 什么是友元函数?     一个类的私有数据成员通常只能由类的函数成员来访问,而友元函数可以访问类的私有数据成员,也能访问其保护成员 2. 友元函数的用 ...

  4. C++学习笔记(十)成员变量和成员函数分开存储、this指针、空指针访问成员函数、const修饰成员函数、友元

    1.成员变量和成员函数分开存储 //1.在C++中,类内的成员变量和成员函数分开存储 //2.只有非静态成员变量才属于类的对象上 //空对象占用内存空间为:1 //C++编译器会给每个空对象也分配一个 ...

  5. c++访问私有(private)成员变量的常用方法

    类的对象不能直接访问类声明的私有成员变量,否则破坏了信息隐藏的目的. 在C++中,为了防止某些数据成员或成员函数从外部被直接访问,可以将它们声明为private,这样编译器会阻止任何来自外部非友元的直 ...

  6. Android怎么访问私有数据(5)

    一,暴露私有的文件 1.有一个应用程序,带一个私有的文件,需求是暴露这个私有的文件. 2. 写ContentProvider的一个子类 3. 定义匹配规则     *  定义匹配器 UriMatche ...

  7. abstract类中不可以有private的成员_C++类成员的三种访问权限:public/protected/private...

    1.访问限定符 C++ 通过 public.protected.private 三个关键字来控制成员变量和成员函数的访问权限(也称为可见性),分别表示:公有的.受保护的.私有的. class 2.访问 ...

  8. C#中访问私有成员技巧

    源代码是别人的,你就不能修改源代码,只提供给你dll.或者你去维护别人的代码,源代码却有丢失.这样的情况如果你想知道私有成员的值,甚至去想直接调用类里面的私有方法.那怎么办呢?其实在.net中访问私有 ...

  9. 继承能够访问父类私有字段_在单元测试中访问私有字段

    继承能够访问父类私有字段 首先,让我大声说一下,您需要将代码设计为可测试的,以便通过公共方法测试私有字段. 但是,(" buts"是人们仍在编程而不是计算机本身的原因,所以在这里很 ...

最新文章

  1. ThinkPHP 框架学习
  2. Observer设计模式【利用商品概念解释】
  3. <java并发编程实践>读书笔记一
  4. CSS学习17之动画
  5. 在DataGrid中將RowHeader 加上文字...
  6. 【PP】生产发货仓位决定
  7. Oracle数据库迁移问题(备份、还原、数据导入导出、PLSQL)IMP - 0009 错误
  8. 外设驱动库开发笔记30:宇电AI-BUS通讯驱动
  9. python爬虫架构设置_Python爬虫进阶三之Scrapy框架安装配置
  10. Delphi 7生成XML
  11. python背包问题递归_想问下大神python的背包问题的源代码(最好玩也有伪代码,请用递归法实现),因为只学过递归法,所...
  12. node.js 设置 淘宝 镜像
  13. selenium + java po模式
  14. (转)机器学习算法比较
  15. iOS开发证书申请教程
  16. 【Graph Embedding】node2vec:算法原理,实现和应用
  17. centos7 禁止ip访问_centos7下使用iptables屏蔽所有中国IP
  18. linux中yaml安装包如何安装,yaml-cpp的安装
  19. SCI各领域国际顶尖学术期刊一览
  20. 初中计算机 课题研究,初中信息技术课题怎么做

热门文章

  1. live555的安装 RTSP点播消息流程实例(客户端:VLC, RTSP服务器:LIVE555 Media Server)
  2. 《算法的乐趣》作者王晓华访谈:多看、多做、多想是秘诀
  3. 谁抢走了中国男人的老婆?
  4. 国内手机产业混乱:产业一窝蜂 企业捞快钱
  5. 程序员的思考--终于确定了自己的技术发展方向
  6. 15条常用的视频音频编辑脚本命令(mencoder/ffmpeg等)
  7. java8 注解: @FunctionalInterface (函数式接口)
  8. [转]char * 和字符数组
  9. [转]用Whois获得电信运营商的IP地址是如何分配的?
  10. jQuery --- grep