📜  C ++ |朋友关键字|问题1(1)

📅  最后修改于: 2023-12-03 14:39:38.437000             🧑  作者: Mango

C++ | 友元关键字 | 问题1

介绍

在 C++ 中,友元关键字(friend)允许一个函数或类访问另一个类的私有成员。这样可以增加程序的灵活性。使用友元关键字时,需要注意不要破坏封装性。

语法
class ClassB;

class ClassA {
    friend class ClassB;   // ClassB 是 ClassA 的友元类
    friend void function(); // 函数是 ClassA 的友元函数
};
友元类

通过友元类,一个类可以访问另一个类的私有成员。下面是一个示例:

class ClassB {
public:
    void print(ClassA &a) {
        // 可以访问 ClassA 类的私有成员
        std::cout << "x = " << a.x << std::endl; // 访问 ClassA 中的私有成员 x
    }
};

class ClassA {
private:
    int x = 10;  // ClassA 的私有成员
    friend class ClassB;   // ClassB 是 ClassA 的友元类

public:
    int getX() { return x; }
};

int main() {
    ClassA a;
    ClassB b;
    b.print(a);
    return 0;
}

代码输出:

x = 10
友元函数

通过友元函数,可以使函数访问一个类的私有成员。下面是一个示例:

class ClassA {
private:
    int x = 10;  // ClassA 的私有成员
    friend void print(ClassA &a);   // print() 是 ClassA 的友元函数

public:
    int getX() { return x; }
};

void print(ClassA &a) {
    // 可以访问 ClassA 类的私有成员
    std::cout << "x = " << a.x << std::endl; // 访问 ClassA 中的私有成员 x
}

int main() {
    ClassA a;
    print(a);
    return 0;
}

代码输出:

x = 10
注意事项

使用友元关键字时,需要注意以下几点:

  • 友元关键字破坏了封装性,因此要避免滥用。
  • 在实现类的友元时,应该尽可能地地将友元限制在必要的范围内。
  • 友元函数只能定义在类外,但可以在类内进行声明。
结论

友元关键字(friend)允许一个函数或类访问另一个类的私有成员。通过友元类和友元函数可以实现这一点。在使用时,需要注意避免滥用和破坏封装性。