• C++ 友元


    我们知道,C++引进了三个关键字:private、protected、public来作为访问说明符。private修饰的成员只能被成员函数访问,而在类外,任何人都不能访问;public修饰的成员可以被所有人访问。

    有没有一种机制,实现一种折中的选择,使得类里面的私有成员,只能让类外的部分函数访问,而不是全部呢?C++ 为了解决这个问题,引入了友元这个概念。

    可以这样理解:如果不是friend的话,程序员就不能从类外“破门而入”,进而看到并不是想让所有人都看到的东西。

    全局函数,另一个类中的成员函数,甚至整个类都可以声明为某一个类的friend。

    类控制着哪些代码可以访问它的成员。声明友元就是其中的一种控制。

    #include <iostream>
    using namespace std;
    class B;
    class C
    {
            public:
            void print();
    
    };
    class A
    {
            private:
            int i;
            public:
            A(int j=1):i(j){}
            friend void print(); //global function
            friend  class B;
            friend  void C::print();
    };
    void C::print()
    {
            A a;
            cout<<"friend C.print() is visiting"<<a.i<<endl;
    }
    
    class B
    {
            private:
            A a;
            public:
            void print()
            {
    
             cout<<"friend B is visiting"<<a.i<<endl;
            }
    };
    void print()
    {
            A a;
            cout<<a.i<<endl;
    }
    int main()
    {
            print(); //gloabl
            B b;
            b.print();
            C c;
            c.print();
            return 0;
    }
    

    输出:

    可以发现,从类外是看不出哪个函数或类是哪个类的友元,要找A类的友元,只能从A类的成员声明中去寻找原型。 

  • 相关阅读:
    day33-1 线程队列
    day32-4 GIL全局解释锁
    day32-3 阻塞非阻塞同步异步&异步回调
    day32-2 线程池与进程池
    day32-1 事件Event
    Chrome设置--disable-web-security解决跨域问题
    去除系统部分属性触摸是出现的色值
    初始化一个React项目
    ## normalize.css 中文版
    vue组件的3种书写形式
  • 原文地址:https://www.cnblogs.com/liujiangyi/p/2628790.html
Copyright © 2020-2023  润新知