友元函数和友元类

友元函数和友元类在其内部对这个类的访问权限等于这个类的成员的访问权限。

友元函数

  • 声明:

    class MyClass {
        public:
            int a,b;
        private:
        	int c;
        public:
        	friend void show(MyClass& cls)  //友元函数
            {
            	printf("%d %d %d\n",a,b,c);    
                MyClass a;
                cout << a.a << a.b << a.c;
            }
    }
    

    这里的show函数就是MyClass类的友元函数,他可以访问MyClass类中的private、protected、public、成员变量。

友元类

  • 声明:

    
    
    class MyClass
    {
        public:
        	int a;
        public:
        	friend class FriendClass;      //将FrinedClass声明为友元类
        private:
        	int b,c;
        
    }
    
    class FriendClass
    {
        public:
        	void f1(MyClass& c) 
            {
                printf("%d %d %d\n", c.a, c.b, c.c);    //可以访问MyClass的private成员变量
                MyClass a;
                cout << a.a << a.b << a.c;
            }
    }
    

    友元类(FriendClass)里的所有函数均可访问声明友元类的这个类(MyClass)的所有变量;注意:友元在类内可以只是声明,实现在外部。另外,如果友元需要访问这个类,那必须在友元之前声明这个类。

说是友元函数、友元类,但我更愿意称之为间谍函数,间谍类。因为friend声明并不是双向的。形式上MyClassFriendClass放在自己的类作用域内,看起来就像把一个间谍(Friend)放在家里,什么东西对间谍(FriendClass)的都是可见的,而间谍(FriendClass)的的东西我(MyClass)却见不到。

posted @ 2020-02-22 22:25  hellozhangjz  阅读(106)  评论(0编辑  收藏  举报