C++ friend关键字

2021-12-24  本文已影响0人  我阿郑
class Object
{
public:
    Object(int v) : value(v)
    {
    }
private:
    int value;
};

void Print(Object* p)
{
    printf("value: %d \n", p->value);
}

在全局函数Print中无法访问Object对象的私有成员

friend关键字

在类A中,用friend关键字可以将一个全局函数声明为该类的“朋友”。也可以将另一个类声明为该类的“朋友”

class Object
{
    // 将全局函数Print声明为“朋友”
    friend void Print(Object* p);

    // 将类Something声明为“朋友”
    friend class Something;
};

举例

class Object
{
    friend class Something;
      ....
};

class Something
{
public:
   void Print(Object* p)
   {
    printf("value: %d \n", p->value);
   } 
}

应用场景

负面作用: friend是不常用的语句,它破坏了访问修饰符的作用,对类的封装够成威胁。

正面作用: 可能的应用场景:在封装一个模块时,模块中有多个类,那么他们之间可以互相声明为朋友以便操作(他们是一伙的)。
也就是说,模块内部的类都是朋友,而外部调用者不是朋友、受访问修饰符的限制

上一篇 下一篇

猜你喜欢

热点阅读