C++类和对象——友元详解

目录

1.友元是什么

2.全局函数做友元 

3.友元类 

类外写成员函数

4.成员函数做友元 

1.友元是什么

在生活中,我们的家里有客厅也有卧室

客人都能进出你家的客厅,但不能进入你家的卧室

但只要你允许,你也可以让自己的好朋友进入你的卧室

友元的关键字为 friend

2.全局函数做友元 

代码示例:

#include<bits/stdc++.h>
using namespace std;class home
{friend void my_good_friend(home *h);//my_good_friend全局函数是home的好朋友//可以访问home中的私有成员public:home(){my_sittingroom = "客厅";my_bedroom = "卧室";}public:string my_sittingroom;private:string my_bedroom;};void my_good_friend(home *h)
{cout << "你的好朋友正在访问你的" << h -> my_sittingroom << endl;cout << "你的好朋友正在访问你的" << h -> my_bedroom << endl;
}int main(){home h;my_good_friend(&h);return 0;
}

3.友元类 

类外写成员函数

代码示例:

#include<bits/stdc++.h>
using namespace std;class home
{friend class good_friend;public:home();
public:string my_sittingroom;private:string my_bedroom;
};class good_friend
{
public:good_friend();void visit();private:home *h;
};//类外写成员函数
home::home()
{my_sittingroom = "客厅";my_bedroom = "卧室";
}good_friend::good_friend()
{h = new home;
}void good_friend::visit()
{cout << "好朋友正在访问" << h -> my_sittingroom << endl;cout << "好朋友正在访问" << h -> my_bedroom << endl;
}int main(){good_friend g;g.visit();return 0;
}

4.成员函数做友元 

代码示例:

#include<bits/stdc++.h>
using namespace std;class home;class good_friend
{
public:good_friend();void visit();//让visit可以访问home中的私有成员void visit2();//让visit2不可以访问home中的私有成员private:home *h;
};class home
{friend void good_friend::visit();//使得good_friend的成员函数visit可以访问本类的私有成员public:home();
public:string my_sittingroom;private:string my_bedroom;
};//类外写成员函数
home::home()
{my_sittingroom = "客厅";my_bedroom = "卧室";
}good_friend::good_friend()
{h = new home;
}void good_friend::visit()
{cout << "好朋友正在访问" << h -> my_sittingroom << endl;cout << "好朋友正在访问" << h -> my_bedroom << endl;
}void good_friend::visit2()
{cout << "好朋友正在访问" << h -> my_sittingroom << endl;//cout << "好朋友正在访问" << h -> my_bedroom << endl;
}int main(){good_friend g;g.visit();g.visit2();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/442851.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt扩展-muParser数学公式解析

muParser数学公式解析 一、概述1. 针对速度进行了优化2. 支持的运算符3. 支持的函数4. 用户定义的常量5. 用户定义的变量6. 自定义值识别回调7. 其他功能 二、内置函数三、内置二元运算符四、三元运算符五、内置常量六、源码引入1. 源码文件2. 编译器开关1. MUP_BASETYPE2.MUP_…

elk之基础概念

写在前面 本文一起看下es的基础概念&#xff0c;比较枯燥的内容说&#xff0c;但不看又不行。开始。 1&#xff1a;document 文档&#xff0c;是es搜索存储数据的最小单元&#xff0c;相当于是MySQL的一行记录&#xff0c;但es中是一个json&#xff0c;如下是一个通过logsta…

【C++入门到精通】特殊类的设计 | 单例模式 [ C++入门 ]

阅读导航 引言一、设计模式概念&#xff08;了解&#xff09;二、单例模式1. 饿汉模式&#xff08;1&#xff09;概念&#xff08;2&#xff09;模拟实现&#xff08;3&#xff09;优缺点&#xff08;4&#xff09;适用场景 2. 懒汉模式&#xff08;1&#xff09;概念&#xff…

充电桩项目实战:搞定多数据源!

你好&#xff0c;我是田哥 最近&#xff0c;我在对充电桩项目进行微服务升级中&#xff0c;既然是项目升级&#xff0c;难免会遇到各种各样的问题。比如&#xff1a;分布式事务问题、多数据源问题、分布式锁问题等。 项目技术栈&#xff1a; SpringSpring BootSpring Cloud Ali…

在线摸头GIF生成系统源码

在线摸头GIF在线生成器html网页源码&#xff0c;可以点击选择文件按钮&#xff0c;或者直接将图片拖入&#xff0c;即可生成导出

GPIO中断

1.EXTI简介 EXTI是External Interrupt的缩写&#xff0c;指外部中断。在嵌入式系统中&#xff0c;外部中断是一种用于处理外部事件的机制。当外部事件发生时&#xff08;比如按下按钮、传感器信号变化等&#xff09;&#xff0c;外部中断可以立即打断正在执行的程序&#xff0…

十一、常用API——练习

常用API——练习 练习1 键盘录入&#xff1a;练习2 算法水题&#xff1a;练习3 算法水题&#xff1a;练习4 算法水题&#xff1a;练习5 算法水题&#xff1a; 练习1 键盘录入&#xff1a; 键盘录入一些1~100之间的整数&#xff0c;并添加到集合中。 直到集合中所有数据和超过2…

Qt Excel读写 - QXlsx的安装配置以及测试

Qt Excel读写 - QXlsx的安装配置以及测试 引言一、安装配置二、简单测试 引言 Qt无自带的库处理Excel 文件&#xff0c;但可通过QAxObject 借助COM接口进行Excel的读写1。亦可使用免费的开源第三方库&#xff1a;QXlsx&#xff0c;一个基于Qt库开发的用于读写Microsoft Excel文…

Java中Date时间类的使用

目录 一、java.util.Date实例化介绍 一&#xff09;、Date对象实例化 二&#xff09;设置Date对象指定日期 &#xff1a; 三&#xff09;将日期格式化输出为中文状态 二、方法介绍 三、方法演示 一、java.util.Date实例化介绍 一&#xff09;、Date对象实例化 //使用无参构造…

Day01_变量和数据类型(注释,关键字,标识符,数据类型,字面量,变量,常量,进制,计算机存储单位,Java的基本数据类型的存储范围,计算机如何表示数据)

文章目录 JavaSE_Day01 变量和数据类型学习目标1.1 注释&#xff08;*comment*&#xff09;&#xff08;掌握&#xff09;1.2 关键字&#xff08;*keyword*&#xff09;&#xff08;掌握&#xff09;1.3 标识符( identifier)&#xff08;掌握&#xff09;1.3.1 标识符的命名规则…

如果我要访问一个网址,那么在网络中会有哪些过程

访问一个网址是我们日常网络使用中非常常见的操作&#xff0c;背后涉及到一系列精密而复杂的步骤。这个过程包括DNS解析、建立TCP连接、发起HTTP请求、服务器处理请求、服务器响应、浏览器渲染等环节。在这篇文章中&#xff0c;我们将深入探讨这些步骤&#xff0c;并解释它们在…

JVM 内存模型

1 什么是 JVM 内存模型 JVM 需要使用计算机的内存&#xff0c;Java 程序运行中所处理的对象或者算法都会使用 JVM 的内 存空间&#xff0c;JVM 将内存区划分为 5 块&#xff0c;这样的结构称之为 JVM 内存模型。 2 JVM 为什么进行内存区域划分 随着对象数量的增加&#xff…