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-------

     

    二、友元类

     

    三、友元注意事项

     

     

  • 相关阅读:
    BZOJ_4320_ShangHai2006 Homework_分块
    BZOJ_3362_[Usaco2004 Feb]Navigation Nightmare 导航噩梦_并查集
    BZOJ_2788_[Poi2012]Festival_差分约束+tarjan+floyed
    BZOJ_2795_[Poi2012]A Horrible Poem_hash+暴力
    BZOJ_1598_[Usaco2008 Mar]牛跑步_A*
    [转载]java匿名对象
    [转载]static in Java
    Bat批处理文件入门
    在set中放入自定义类型
    [转载]C++STL概述
  • 原文地址:https://www.cnblogs.com/Tang-tangt/p/9675540.html
Copyright © 2011-2022 走看看