zoukankan      html  css  js  c++  java
  • 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类的成员声明中去寻找原型。 

  • 相关阅读:
    【KMP】Period
    【KMP】Cyclic Nacklace
    【KMP】Oulipo
    【KMP】Number Sequence
    二分
    Stock 贪心经典 Zoj2921
    D. Block Tower
    烦人的dp
    搜索
    hdu 一个人的旅行
  • 原文地址:https://www.cnblogs.com/liujiangyi/p/2628790.html
Copyright © 2011-2022 走看看