本文主要是介绍C++中的friend关键字,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
C++中的friend
关键字允许其他类或函数访问私有和受保护成员。使用friend
是一种破坏封装的做法,但在某些情况下,它提供了必要的灵活性。
-
friend函数
- 定义:允许一个普通函数访问类的私有(
private
)和受保护(protected
)成员。 - 使用场景:当你需要一个函数访问类的内部成员,但不希望该函数是类的成员时。
- 示例代码:
class Box { private:double width; public:Box(double w) : width(w) {}friend void printWidth(Box box); };void printWidth(Box box) {// 因为printWidth是Box的友元,它可以直接访问私有成员widthstd::cout << "Width of box: " << box.width << std::endl; }
- 定义:允许一个普通函数访问类的私有(
-
friend类
- 定义:允许另一个类访问该类的私有(
private
)和受保护(protected
)成员。 - 使用场景:当两个或多个类需要紧密合作,并且需要互相访问对方的私有或受保护成员时。
- 示例代码:
class Box { private:double width; public:Box(double w) : width(w) {}friend class BoxPrinter; };class BoxPrinter { public:void printWidth(Box& box) {std::cout << "Width of box: " << box.width << std::endl;} };
- 定义:允许另一个类访问该类的私有(
-
friend成员函数
- 定义:允许其他类的某个成员函数访问本类的私有(
private
)和受保护(protected
)成员。 - 使用场景:当你只希望授予特定的外部类成员函数访问权限,而不是整个外部类时。
- 示例代码:
class Box { private:double width; public:Box(double w) : width(w) {}friend void BoxPrinter::printWidth(Box& box); };class BoxPrinter { public:void printWidth(Box& box) {std::cout << "Width of box: " << box.width << std::endl;} };
- 定义:允许其他类的某个成员函数访问本类的私有(
注意事项
- 破坏封装:
friend
关键字虽然提供了灵活性,但它破坏了类的封装性。应谨慎使用,只在没有更好的设计方案时考虑使用。 - 循环依赖:过多使用
friend
关键字可能导致代码之间的耦合度过高,增加了循环依赖的风险。 - 设计考量:在设计类的接口时,首先考虑是否可以通过公有接口(
public
)或继承(inheritance
)来实现需要的功能,避免过早地使用friend
。
这篇关于C++中的friend关键字的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!