C++中类和对象中的友元函数是一个非常重要的概念,下面我将为大家详细讲解,包括什么是友元函数、如何使用友元函数以及友元函数的作用。
什么是友元函数?
友元函数是在类的外部定义的,但是它能够访问类的私有数据成员。例如,一个类中的成员函数可以访问该类的私有数据成员,而友元函数也可以访问该类的私有数据成员,因此它就被称为友元函数。
在C++中,友元函数有两种类型:一种是普通友元函数,另一种是类的友元函数。普通友元函数是在类之外定义的,但是它可以访问该类的私有和保护成员。而类的友元函数则是在另一个类中定义的,但是它可以访问该类的私有和保护成员。
如何使用友元函数?
要使用友元函数,需要在类的定义中将该函数声明为友元函数,如下所示:
class MyClass {
public:
MyClass();
~MyClass();
friend void myFunction(); // 声明 myFunction 是该类的友元函数
private:
int myVariable;
};
在上述代码中,我们声明了一个名为myFunction()
的友元函数。此时,该函数可以访问MyClass
类的私有成员变量myVariable
。
友元函数的作用
友元函数可以方便地访问类的私有成员,使其在一定情况下变得易于实现。比如:
- 其他类的成员函数需要访问类的私有成员;
- 该类中的多个成员函数需要相互调用,但不是任何函数都可以访问类的私有成员;
- 该类需要重载运算符时,可以使用友元函数指定运算符的含义。
示例说明
下面我们通过两个示例来进一步说明友元函数的使用:
示例一:正方形类的友元函数求面积。
class Squre {
public:
Squre(double s);
~Squre();
friend double area(const Squre& s); // 声明 area 函数是该类的友元函数
private:
double side;
};
在上述代码中,我们声明了一个名为area()
的友元函数,该函数需要一个Squre
对象的引用作为参数。该函数可以访问Squre
类的side
成员变量,并计算并返回正方形的面积。
double area(const Squre& s) {
return s.side * s.side;
}
示例二:复数类的友元函数重载加号运算符。
class Complex {
public:
Complex(double r, double i);
~Complex();
friend Complex operator+(const Complex& c1, const Complex& c2); // 声明 + 运算符是该类的友元函数
private:
double real;
double imag;
};
在上述代码中,我们声明了一个名为operator+()
的友元函数,该函数需要两个Complex
对象的引用作为参数。该函数可以访问Complex
类的real
和imag
成员变量,并返回两个复数的和。
Complex operator+(const Complex& c1, const Complex& c2) {
return Complex(c1.real + c2.real, c1.imag + c2.imag);
}
当两个复数相加时,可以使用以下语法:
Complex c1(1.0, 2.0);
Complex c2(2.0, 3.0);
Complex c3 = c1 + c2;
通过上面两个示例,我们可以看出,在某些情况下,使用友元函数可以使代码更加简洁、易于理解,并且使得类的设计更加合理。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++简单又轻松的讲解类和对象中友元函数 - Python技术站