20240417,友元 FRIEND

server/2024/11/9 16:58:28/

··················本来要学习的吃瓜吃了一下午

目录

3.1 全局函数做友元

3.2 友元类

3.3 成员函数做友元

三,友元

3.1 全局函数做友元
#include<iostream>
using namespace std;
class Building
{friend void goodGay(Building* building);//好朋友,可以访问buiding的全部成员
public:Building(){m_SittingRoom = "客厅";m_BedRoom = "卧室";}string m_SittingRoom;
private:string m_BedRoom;
};
void goodGay(Building *building)
{cout << "好基友的全局函数  正在访问:" << building->m_SittingRoom << endl;cout << "好基友的全局函数  正在访问:" << building->m_BedRoom << endl;
}
void test01()
{Building bding;goodGay(&bding);
}
int main()
{test01();system("pause");return 0;
}
3.2 友元类
#include<iostream>
#include<string>
using namespace std;
class Building;class Goodgay
{
public:Goodgay();void visit();//参观函数,访问BUIDING中的属性Building * building;
};class Building
{friend Goodgay;//GoodGAY类是BUILDING类的好朋友,可以访问BUILDING的私有成员
public:Building();string m_SittingRoom;
private:string m_BedRoom;
};Building::Building()//类外写成员函数
{m_SittingRoom = "客厅";m_BedRoom = "卧室";
}
Goodgay::Goodgay()
{//创建一个建筑物的对象building = new Building;//堆区创建一个BUILDING的对象//构造函数解决初始化问题,所以?这是初始化?*building指向这个堆区对象
}
void Goodgay::visit()
{cout << "好基友类正在访问:" << building->m_SittingRoom << endl;cout << "好基友类正在访问:" << building->m_BedRoom << endl;
}
void test01()
{Goodgay gg;gg.visit();
}
int main()
{test01();system("pause");return 0;
}
3.3 成员函数做友元
#include<iostream>
#include<string>
using namespace std;
class Building;class Goodgay
{
public:Goodgay();void visit();//可以访问Buiding私有void visit01();//不可以访问Buiding私有Building * building;
};class Building
{//friend void visit();这种写法会将VISIT识别为一个全局函数,而不是Goodgay中的成员函数friend void Goodgay::visit();
public:Building();string m_SittingRoom;
private:string m_BedRoom;
};Building::Building()//类外写成员函数
{m_SittingRoom = "客厅";m_BedRoom = "卧室";
}
Goodgay::Goodgay()
{//创建一个建筑物的对象building = new Building;//堆区创建一个BUILDING的对象,返回指针//构造函数解决初始化问题,所以?这是初始化?building指向这个堆区对象
}
void Goodgay::visit()
{cout << "好基友类visit 正在访问:" << building->m_SittingRoom << endl;cout << "好基友类visit 正在访问:" << building->m_BedRoom << endl;
}
void Goodgay::visit01()
{cout << "好基友类visit01  正在访问:" << building->m_SittingRoom << endl;//cout << "好基友类visit01 正在访问:" << building->m_BedRoom << endl;
}
void test01()
{Goodgay gg;gg.visit();gg.visit01();
}
int main()
{test01();system("pause");return 0;
}

想让谁访问,就让谁FRIEND


http://www.ppmy.cn/server/5517.html

相关文章

4.2OpenCV-运动分析类、OpenCV-对象分割类、 OpenCV-颜色过滤器类、OpenCV-简单图像处理类

4.2.6 OpenCV-运动分析类 本节内容介绍OpenCV中的运动分析类demo 4.2.6.1 goodfeature_track 角点检测 机器人端启动摄像头roslaunch robot_vision robot_camera.launch 机器人端启动角点检测roslaunch robot_vision goodfeature_track.launch PC端启动rqt_image_view工具/…

Linux下如何使用Git进行版本控制

Linux下使用Git进行版本控制 介绍&#xff1a; Git是一种分布式版本控制系统&#xff0c;最初由Linus Torvalds在2005年开发并在Linux内核项目中使用。它具有高效、快速、简单、灵活和强大的特性&#xff0c;因此在开源社区和软件开发行业的广泛使用。 Git的工作原理&#x…

【Hadoop3.3.6全分布式环境搭建】

说明: 完成Hadoop全分布式环境搭建,需准备至少3台虚拟机(master slave01 slave02)环境: VMWare + Centos7 + JDK1.8+ Hadoop3.3.6主机规划: 主节点:master从节点:slave01 , slave02 一、准备工作 1、所有主机安装jdk 上传jdk-8u171-linux-x64.tar.gz到/root目录下,然后…

嵌入式学习57-ARM7(字符设备驱动框架led)

知识零碎&#xff1a; kernel 内核 printk 内核打印 cat /proc/devices mknod ? 查看指令 gcc -oapp hello.c 字符设备驱动流程 字符设备程序运行流程 gcc中-c和-o是编译时可选的参数 -c …

ssm064农产品仓库管理系统系统+jsp

农产品仓库管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本农产品仓库管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者…

springboot WebFilter+@Component urlPatterns 全部拦截

问题描述 WebFilter(filterName “ssoFilter”,urlPatterns “/*”)配置 Order中的value越小&#xff0c;优先级越高。 解决方法一: 在springboot启动类上添加 ServletComponentScan(basePackages “com.package.path”) 解决方法二&#xff1a; 手动配置bean&#xff08;…

卷王问卷考试系统/SurveyKing调查系统源码

SurveyKing是一个功能强大的开源调查问卷和考试系统&#xff0c;它能够快速部署并适用于各个行业。 这个系统提供了在线表单设计、数据收集、统计和分析等功能&#xff0c;支持20多种题型&#xff0c;提供多种创建问卷的方式和设置。 项 目 地 址 &#xff1a; runruncode.c…

【C语言】指针详解(五)

目录 1.字符指针 1.1常量字符串 2.指针数组 3.数组指针 1.字符指针 字符指针就是指向字符的指针&#xff0c;字符指针可以存储字符变量的地址。 举例如下&#xff1a; 定义指针变量pa存a的地址&#xff0c;改变*pa的值&#xff0c;a也会随之改变 。 1.1常量字符串 &#x1f…