zoukankan      html  css  js  c++  java
  • C++之友元

     

    一、友元函数

    分为友元全局函数和友元成员函数

    1.友元全局函数

     

    2.友元成员函数

     

    3.补充说明

    <1> 友元带来方便的同时也带来了风险,比如破坏类的封装性,除非有特殊需要,否则一般情况下不建议处处使用友元。

     

    <2> 友元函数可以存取私有成员、公有成员和保护成员,即可以出现在类的任何部分。(但建议将其写在类的最前边)

    friend关键字与访问限定符public、private、protected并不形成交叉关系,也即它们并不构成约束,所以友元函数的声明可以写在类的任何位置,但建议写在类的最前面。

    【因为作为一个类来说,它对外如何进行暴露是非常重要的,把重要的信息放在前面有助于编程过程中减小犯错的概率】

     

    <3> 使用友元成员函数时注意不要将头文件互相包含,会造成死循环。

    例:类2的某成员函数是类1的友元函数

    可以在类1(被访问私有成员的类)的头文件中包含定义了友元成员函数的类2头文件,然后在类2头文件中“class 类1;”即前置声明类1,再在类2的cpp中包含类1头文件,以具体实现友元成员函数

    -------类1.h-------

    #include "类2.h"

    class 类1
    {
    friend void 类2::f(类1 &);
    };

    -------类1.h-------


    -------类2.h-------

    class 类1;

    class 类2
    {
    void f(类1 &);
    };

    -------类2.h-------


    -------类2.cpp-------

    #include "类1.h"

    void 类2::f(类1 &)
    {
    }

    -------类2.cpp-------

     

    二、友元类

     

    三、友元注意事项

     

     

  • 相关阅读:
    JS中json对象克隆
    jhipster中图片路径打包问题(webpack)
    arcgis for javascript api 4.x 中,使用本地非 4326坐标系绘制功能实现
    spring核心之IOC
    spring基于XML的声明式事务控制
    hibernate之事务处理
    hibernate之一级缓存
    hibernate之一对多,多对一
    hibernate之HQL,Criteria与SQL
    spring的基于注解的IOC配置
  • 原文地址:https://www.cnblogs.com/Tang-tangt/p/9675540.html
Copyright © 2011-2022 走看看