什么是友元函数?
友元函数(friend function)是C++中一个特殊的函数类型。它不是类的成员函数,但它可以访问类的私有(private)和保护(protected)成员。友元函数提供了一种突破类封装的机制,允许在类之外的代码访问类的私有和保护成员。
当你想要让某个函数访问一个类的私有和保护成员时,可以将这个函数声明为类的友元。在类定义中,你需要使用friend
关键字来声明友元函数。友元函数可以是普通的非成员函数,也可以是另一个类的成员函数。
请注意,滥用友元函数会破坏封装和数据隐藏,可能导致程序设计上的问题。因此,在实际编程中,应谨慎使用友元函数。
#include <iostream>
using namespace std;
class MyClass {
private:
int secretValue;
public:
MyClass(int value) : secretValue(value) {}
friend void revealSecret(const MyClass& obj);
};
// 声明为MyClass类的友元的非成员函数
void revealSecret(const MyClass& obj) {
cout << "The secret value is: " << obj.secretValue << endl;
}
int main() {
MyClass obj(42);
revealSecret(obj); // 调用友元函数,访问并输出MyClass类的私有成员secretValue
return 0;
}
在这个例子中,revealSecret
函数被声明为MyClass
类的友元函数,它可以访问类的私有成员变量secretValue
。当我们在main
函数中创建一个MyClass
对象并调用revealSecret
函数时,revealSecret
函数可以访问并输出对象的私有成员。
例36:
#include <iostream>
using namespace std;
class Myclass {
private:
int a, b, max, min;
public:
Myclass(int i, int j): a(i), b(j) {
max = (a > b) ? a : b;
min = (a < b) ? a : b;
}
friend int Result(Myclass & x);
};
int Result(Myclass& x) {
return x.max * x.max - x.min * x.min;
}
int main() {
Myclass n(3, 4);
cout << Result(n) << endl;
}
- 引入<iostream>头文件,包含C++的标准输入输出库。
- 定义了一个名为Myclass的类。它包含四个私有成员变量:a, b, max, min。
- Myclass类有一个构造函数,接受两个整数参数i和j,分别赋值给成员变量a和b。在构造函数中,使用三元运算符计算a和b之间的最大值和最小值,分别存储在max和min成员变量中。
- 在Myclass类中,声明了一个友元函数Result()。友元函数是不属于类的成员函数,但它可以访问类的私有成员。这里,Result()函数被声明为Myclass类的友元,因此它可以访问类的私有成员变量。
- 定义Result()函数。它接受一个Myclass类的引用作为参数,并返回一个整数。在这个函数中,通过引用参数x访问到Myclass类的max和min成员变量,计算并返回它们的差值(最大值平方减最小值平方)。
- 在main()函数中,创建了一个Myclass类的对象n,传入参数3和4。然后调用Result()函数并将结果输出到控制台。
程序的输出将是:(4 * 4) - (3 * 3) = 16 - 9 = 7
标签:友元,函数,int,成员,面向对象,MyClass,Myclass From: https://www.cnblogs.com/eric-fox/p/17305396.html