友元函数和友元类

友元函数

  • 声明:

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

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

友元类

  • 声明:

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

    友元类(FriendClass)里的所有函数均可访问声明友元类的这个类(MyClass)的所有变量;

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

原文地址:https://www.cnblogs.com/rookiezjz/p/12347639.html