16_友元

目录 Table of Contents

16 友元

朋友 元素

破坏了面向对象的封装特性, 不推荐使用

JAVA, C# 已经不再提供这种东西了

C++ 允许你用一种奇葩的方式访问私有成员

友元函数

class CObject
{
    friend void PrintObject(CObject* pObject);  // 告诉编译器, 这个函数是我的朋友, 它可以访问我的私有成员了
    private:
        int x;
    public:
        CObject(){}
        CObject(int x)
        {
            this->x = x;
        }
};

void PrintObject(CObject* pObject)
{
    printf("%d \n",pObject->x);
}

这种语法破坏了面向对象的特性

向面向过程的一种妥协

妥协的结果就是不伦不类, 既不是面向对象又不是面向过程

friend void PrintObject(CObject* pObject); 放在结构体哪里都可以

友元类

friend class Test; 告诉编译器这个 Test 类是我的朋友, 它就可以直接访问我的私有成员

但是这种是单向的, 就是说 Test 可以访问我的私有成员, 但是我不能直接访问 Test 的私有成员

结论

看懂了这是什么就可以了

不推荐使用