C++友元函数与友元类深入解析

版权申诉
0 下载量 102 浏览量 更新于2024-10-03 收藏 6KB RAR 举报
资源摘要信息:"C++友元函数和友元类的详细介绍" C++是一种强大的编程语言,它的许多特性使它在软件开发领域得到了广泛的应用。其中,友元函数和友元类是C++中的一个重要概念,它们在类的封装性上提供了一种特殊的方式。在这篇文章中,我们将详细介绍C++的友元函数和友元类。 首先,我们需要明白什么是封装。在面向对象编程中,封装是一种将数据(或状态)和行为捆绑在一起的方法,并且这种捆绑是隐藏的,这意味着外部代码无法直接访问内部数据,只能通过公共接口与对象交互。封装可以保护对象的状态,并且使得代码更加模块化。 然而,在某些情况下,我们可能需要打破封装性,允许某些函数或者类访问类的私有或保护成员。这就是友元函数和友元类的用武之地。友元不是类的成员函数,但它们有权访问类的私有和保护成员。 1. 友元函数 友元函数是一个普通函数,它被允许访问类的私有和保护成员。要使一个函数成为类的友元,我们需在类定义中使用关键字`friend`。友元函数可以是另一个类的成员函数,也可以是全局函数。 友元函数的声明应该放在类定义中的任何访问控制符(public, private, protected)之外。友元函数没有访问限制,它们可以访问类的所有成员,包括私有和保护成员。 下面是友元函数的一个例子: ```cpp class Box { double width; public: double length; friend void printWidth(Box box); // 友元函数 void setWidth(double wid); }; // 函数定义 void Box::setWidth(double wid) { width = wid; } // 友元函数定义 void printWidth(Box box) { // 友元函数可以访问私有成员 std::cout << "Width of box : " << box.width << std::endl; } ``` 在这个例子中,`printWidth`是一个友元函数,它可以直接访问`Box`类的私有成员`width`。 2. 友元类 友元类可以访问另一个类的所有成员,包括私有成员。当一个类声明另一个类为友元时,这个声明必须在另一个类的声明中进行。友元关系不是相互的,除非明确声明。 例如: ```cpp class Square; // 前向声明 class Rectangle { int width; friend class Square; // 声明Square为友元类 public: int height; void总面积(int w, int h) { width = w; height = h; } }; class Square { private: int side; public: void area() { Rectangle rectangle; rectangle总面积(side, side); std::cout << "Area of rectangle : " << rectangle.width * rectangle.height << std::endl; } }; ``` 在这个例子中,`Square`类被声明为`Rectangle`类的友元,因此`Square`可以访问`Rectangle`的私有成员`width`和`height`。 总结来说,友元函数和友元类都是破坏封装性的一种手段,它们允许非成员函数或者非成员类访问类的私有成员。在设计程序时,应当谨慎使用友元,因为过度使用会破坏类的封装性和模块化,从而使得程序更难维护和理解。只有在确实需要外部访问私有成员时,才应该考虑使用友元。