C++实例代码详解友元函数
友元函数概念
友元函数是指可以访问一个类的私有成员和保护成员的非成员函数。友元函数不是类的成员函数,但是它可以访问类中的非公有成员。需要注意的是,友元函数不会被继承。
友元函数的语法格式如下:
friend return_type function_name( parameter_list );
其中,关键字 friend
声明了整个函数为友元函数,可以访问该类的私有成员和保护成员。return_type 指定函数的返回值类型,function_name 是函数名,parameter_list 是函数的参数列表。
友元函数的使用步骤
友元函数的使用步骤如下:
- 在类定义中声明友元函数,可以在类的任何区域声明,一般在 public、protected 或 private 区域之后声明。
- 实现友元函数,友元函数可以在类里面或外面定义。
- 调用友元函数。
友元函数的使用场景
友元函数在以下情况下应该使用:
- 当需要访问类的私有成员和保护成员,但是又不想成为类的成员函数,此时可以通过友元函数来实现。
- 当需要多个类之间相互访问非公有成员时,可以使用友元函数来实现。
示例一
#include <iostream>
using namespace std;
class CRectangle {
private:
int width;
int height;
public:
CRectangle(int w, int h) : width(w), height(h) {}
// 声明友元函数
friend int getArea(CRectangle rect);
};
// 实现友元函数
int getArea(CRectangle rect) {
return rect.width * rect.height;
}
int main() {
CRectangle rect(3, 4);
// 调用友元函数
int area = getArea(rect);
cout << "矩形面积为:" << area << endl;
return 0;
}
在这个示例中,声明了一个 CRectangle
的友元函数 getArea
,用来计算矩形的面积,该函数可以访问 CRectangle
的私有成员 width
和 height
。
示例二
#include <iostream>
using namespace std;
class CCar;
class CDriver {
public:
void drive(CCar *car);
};
class CCar {
private:
int price;
friend int getPrice(CCar car);
friend void CDriver::drive(CCar *car);
};
// 实现友元函数
int getPrice(CCar car) {
return car.price;
}
// 实现友元函数
void CDriver::drive(CCar *car) {
cout << "正在开车,车的价格为:" << car->price << endl;
}
int main() {
CCar car;
car.price = 100000;
CDriver driver;
driver.drive(&car);
return 0;
}
在这个示例中,声明了一个 CCar
类和一个 CDriver
类,CCar
类的 price
成员被声明为友元函数 getPrice
和友元类 CDriver
的成员函数 drive
,这两个成员函数都可以访问 CCar
的私有成员 price
。另外,CDriver
的 drive
成员函数拥有一个指向 CCar
对象的指针,通过指针来访问 CCar
的私有成员 price
。
以上是友元函数的详细讲解及实例代码,有任何问题可以提问。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实例代码详解友元函数 - Python技术站