面向对象 程序分析 友元函数

什么是友元函数?

友元函数(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;
}

 

  1. 引入<iostream>头文件,包含C++的标准输入输出库。
  2. 定义了一个名为Myclass的类。它包含四个私有成员变量:a, b, max, min。
  3. Myclass类有一个构造函数,接受两个整数参数i和j,分别赋值给成员变量a和b。在构造函数中,使用三元运算符计算a和b之间的最大值和最小值,分别存储在max和min成员变量中。
  4. 在Myclass类中,声明了一个友元函数Result()。友元函数是不属于类的成员函数,但它可以访问类的私有成员。这里,Result()函数被声明为Myclass类的友元,因此它可以访问类的私有成员变量。
  5. 定义Result()函数。它接受一个Myclass类的引用作为参数,并返回一个整数。在这个函数中,通过引用参数x访问到Myclass类的max和min成员变量,计算并返回它们的差值(最大值平方减最小值平方)。
  6. 在main()函数中,创建了一个Myclass类的对象n,传入参数3和4。然后调用Result()函数并将结果输出到控制台。

程序的输出将是:(4 * 4) - (3 * 3) = 16 - 9 = 7

 

posted @ 2023-04-11 10:30  漓川  阅读(37)  评论(0)    收藏  举报