友元

简介:  1友元:C++控制类对象私有部分的访问,但有时候需要在类的外部访问类的私有成员,这种情况下C++提供了友元机制。   创建友元函数步骤:   A:将函数声明放到类的声明中,并在原型前加上关键字friend friend 返回值 函数名称(参数列表); friend classclassname;   B:编写友元函数定义,不需要再定义中使


1友元:C++控制类对象私有部分的访问,但有时候需要在类的外部访问类的私有成员,这种情况下C++提供了友元机制。

  创建友元函数步骤:

  A:将函数声明放到类的声明中,并在原型前加上关键字friend

friend 返回值 函数名称(参数列表);

friend classclassname;

  B:编写友元函数定义,不需要再定义中使用关键字friend.

   friend int 友元函数名(const classname &a);

#include <iostream>

 

using namespace std;

 

class demo

{

private:

    int i;//只能在类的内部访问

public:

    demo() //构造函数

    {

       cout << "demo" << this << endl;

    }

    demo(const demo &it) //拷贝构造

    {

       //一旦自己实现了拷贝构造函数,类成员之间的赋值就需要自己完成,编译器不管了

       this->i = it.i;

       cout << "copy demo" << this << endl;

    }

    ~demo()

    {

       cout << "~demo" << this << endl;

    }

    void set_i(int i)

    {

       this->i = i;

    }

    int get_i()

    {

       return i;

    }

    //意思是声明一个该类的友元函数,该函数可以调用本类的信息

    friend void test();

    //意思是声明一个该类的友元,该类的信息可以被下面的类调用

    friend class demo1;

    //demodemo0互为友元

    friend class demo0;

};

 

void test()

{

    //因为这个函数时上面的

    demo d;

    //这里d.i就是demo中的私有的变量,由于使用了友元,所以test可以使用了

    d.i = 100;

    printf("%d\n",d.i);

}

 

class demo0

{

private:

    int i;

public:

    demo0()

    {

       demo d;

       d.i = 123;

       //打印出了123,说明友元中的类可以访问类中变量

       printf("%d\n",d.i);

    }

};

 

class demo1

{

public:

    demo1()

    {

       demo d;

       d.i = 144;

       printf("%d\n",d.i);

    }

    friend class demo2;

};

 

//通过下面的例子得出:我的朋友的朋友,不会是我的朋友

class demo2

{

public:

    demo2()

    {

       demo d;

       //这一句不能放开,如果放开了报错

       //d.i = 155;

    }

};

 

int main(void)

{

    test();

 

    demo0 d0;

 

    demo1 d1;

 

    //下面运行的时候报错了,说明友元的一个特点:我的朋友的朋友,不会是我的朋友

    //demo2 d2;

 

    return 0;

}

2.运行截图:

3.友元关系说明图

 

目录
相关文章
|
机器学习/深度学习 JSON 前端开发
RESTful API接口设计规范
近年来移动互联网的发展,前端设备层出不穷(手机、平板、桌面电脑、其他专用设备…),因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信,于是RESTful诞生了,它可以通过一套统一的接口为 Web,iOS和Android提供服务。
4028 1
RESTful API接口设计规范
|
Kubernetes 安全 Linux
K8S集群安装
K8S集群安装
723 0
|
前端开发 JavaScript 测试技术
Google提出的网页性能评价指标
Google推出的“网页指标”计划旨在优化网页用户体验,其中Core Web Vitals为核心指标,包括Largest Contentful Paint (LCP)、Interaction to Next Paint (INP)和Cumulative Layout Shift (CLS),分别衡量加载速度、互动性和视觉稳定性。这些指标采用第75百分位数评估,确保在不同设备和网络环境下提供一致的用户体验。
503 5
Google提出的网页性能评价指标
|
弹性计算 监控 Cloud Native
云原生架构下的性能优化实践与策略####
在数字化转型加速的今天,云原生技术以其弹性、敏捷和高效的特点成为企业IT架构转型的首选。本文深入探讨了云原生架构的核心理念,通过具体案例分析,揭示了性能优化的关键路径与策略,为开发者和企业提供了可操作的实践指南。 ####
|
JSON 前端开发 JavaScript
解决跨域问题
解决跨域问题
|
Java 开发者
别再傻傻分不清!Java if-else与switch的性能对比全解析!
别再傻傻分不清!Java if-else与switch的性能对比全解析!
409 1
|
网络协议 Linux
在Linux中,如何分析网络连接和端口占用情况?
在Linux中,如何分析网络连接和端口占用情况?
|
存储 人工智能 关系型数据库
使用 PostgreSQL pgvector 的 AI 应用程序中的多模态搜索
大型语言模型(LLM)的发展已拓展至多模态领域,不仅能处理文本,还能解析图像。本文介绍如何构建一个多模态搜索应用,用户可通过上传图片或输入文本来搜索印度菜谱。该应用支持多种LLM服务,如OpenAI及Ollama本地部署模型,并运用pgvector扩展在PostgreSQL中高效存储和检索向量嵌入。我们还展示了如何生成菜谱描述的嵌入并向数据库写入这些嵌入,以及如何通过API接口结合文本和图像查询来获取最相关的菜谱结果。此外,讨论了使用分布式SQL数据库如YugabyteDB增强应用的可扩展性和健壮性。
468 1
|
存储 算法 安全
深入理解SHA系列哈希算法:安全性的保障与演进
深入理解SHA系列哈希算法:安全性的保障与演进
|
存储 算法 安全
详细解读CA认证原理以及实现(上)
详细解读CA认证原理以及实现(上)
279 1