友元基本介绍

news/2024/11/15 8:24:58/

在这里插入图片描述

文章目录

  • 参考
  • 友元类
  • 友元成员函数
  • 其他友元关系?

参考

  • 《C++ Primer Plus》第15章:友元、异常和其他
  • 菜鸟教程

类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。

友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友元。

友元类

什么时候希望一个类成为另一个类的友元?
假定是编写一个模拟电视机(Tv类)和遥控器(Remote类)的简单程序。
这两个类之间应该存在某种关系,但不是is-a, has-a 的关系。遥控器可以改变电视机的状态,Remote 类可以作为 Tv 类的一个友元。

友元类声明可以在公有、私有或保护部分。

#ifdef TV_H_
#define TV_H_class Tv :
{
public:friend cass Remote;//Remote canacenum (off, On);enum(MinVal, MaxVal 20);enum(Antenna, Cable);enum(TV, DVD);
private:int state; //on or offint volume; //assumed to be digitizedint maxchannel; //maximum number of channelsint channel; //current channel settingint mode; //broadcast or cable
};class Remote {
private:int mode;
public:Remote(int m = Tv::TV) :mode(m) {};bool volup(Tv& t) { return t.volup(); }bool voldown(Tv& t) { return t.voldown(); }
};#endif // 

友元成员函数

也可以直接声明某成员函数为友元

#include <iostream>using namespace std;class Box
{double width;
public:friend void printWidth( Box box );void setWidth( double wid );
};// 成员函数定义
void Box::setWidth( double wid )
{width = wid;
}// 请注意:printWidth() 不是任何类的成员函数
void printWidth( Box box )
{/* 因为 printWidth() 是 Box 的友元,它可以直接访问该类的任何成员 */cout << "Width of box : " << box.width <<endl;
}// 程序的主函数
int main( )
{Box box;// 使用成员函数设置宽度box.setWidth(10.0);// 使用友元函数输出宽度printWidth( box );return 0;
}

其他友元关系?

2022-11-21 v1


http://www.ppmy.cn/news/869973.html

相关文章

【嵌入式Qt开发入门】Qt如何网络编程——建立TCP通信服务端(附项目代码)

TCP 简介 TCP 协议&#xff08;Transmission Control Protocol&#xff09;全称是传输控制协议是一种面向连接的、可靠的、 基于字节流的传输层通信协议。 TCP 通信必须先建立 TCP 连接&#xff0c;通信端分为客户端和服务端。服务端通过监听某个端口来监听是否有客户端连接到来…

元几官网: http://www.yuanji.tech

元几官网: http://www.yuanji.tech 元几官网 元几科技官网 南京元几科技有限公司官网 元几首页 元几科技首页 南京元几科技有限公司首页 元几主页 元…

基恩士编程c语言,基恩士xg7000系列.pdf

基恩士xg7000系列 全新 超高速&#xff0c;全自定义视觉系统 XG-7000 系列 全面的自定义单机式视觉系统 直观&#xff0c;迅速&#xff0c;高灵活性且完全自定义 - XG 7000 系列 4.0 版 满足您所有的应用需求 XG-7000 系列 XG-7000 系列的来临 CV-5000 系列 XG-7000 度 速 理 处…

在线练习毛笔书法或水墨画的html5网站,友基墨客M-Brush官方版

书法是我们中华民族文化艺术的瑰宝&#xff0c;那么不妨用友基墨客M-Brush官方版来学习下&#xff0c;它不仅是水墨画软件&#xff0c;还可以练习毛笔书法&#xff0c;也可以练习水墨国画&#xff0c;需要配合数位板一起使用&#xff0c;墨色和笔刷都非常的齐全。另外&#xff…

在Vue种使用Vant框架

第一步&#xff1a;打开Vant框架地址 https://vant-contrib.gitee.io/vant/v2/#/zh-CN/home 第二步&#xff1a; 安装 第三步&#xff1a;引入&#xff08;我这里使用的是按需导入&#xff09; 执行命令&#xff1a; npm i babel-plugin-import -D ①&#xff1a;src下创建个…

【数据网格架构】数据网格架构详解

“我想指出&#xff0c;所提供的链接都不是附属的&#xff0c;我从本文中提到的公司中没有任何收获。我做这一切是因为直到最近我才听说过数据网格&#xff0c;我很期待这次活动&#xff0c;并希望在此之前深入了解一下。我还认为这可能会让其他人感兴趣&#xff0c;并付出了额…

计算网速

生活中&#xff0c;我们常会看到传输速率是300Mbps,1200Mbps等&#xff0c;那么他们一秒多少MB呢&#xff1f; MByte&#xff08;兆&#xff09;是指字节数量&#xff0c;Mbit是指比特位数。 换算公式如下&#xff1a; Kbit/s 1000 bit/s 1Mbit/s 1000 0000 bit/s 1Gbit/s…

电脑提高网速方法,网速直接起飞!

方法如下 方法1 1——》按WinR打开运行框&#xff0c;输入“cmd” 2——》在弹出来的界面里2——输入“ipconfig/flushdns”按回车键 3——》再次查看下载速度&#xff0c;直接上天&#xff01; 方法2 1——》按WinR打开运行框&#xff0c;输入“cmd” 2——》在弹出来的…