欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > C++小课堂——friend友元

C++小课堂——friend友元

2025/3/15 20:10:46 来源:https://blog.csdn.net/New_Teen/article/details/146190197  浏览:    关键词:C++小课堂——friend友元

文章目录

    • 1. 友元函数
    • 2. 友元类
    • 3. 友元成员函数
    • 友元关系不存在传递性
    • 友元小结

在C++中,friend 关键字用于声明友元(friend)。友元是一种机制,允许某个函数(可以是其它类的成员函数,或者是某个外部函数)或访问另一个类的私有成员。friend 关键字可以用于函数、类、或整个类的成员函数。

一般来说,最好在类定义开始或结束前的位置集中声明友元。

1. 友元函数

class MyClass {
private:int privateMember;public:MyClass(int value) : privateMember(value) {}// 声明友元函数friend void friendFunction(const MyClass& obj);
};// 定义友元函数,可以访问私有成员
void friendFunction(const MyClass& obj) {std::cout << "Friend Function: " << obj.privateMember << std::endl;
}int main() {MyClass obj(42);// 调用友元函数friendFunction(obj);return 0;
}

在这个例子中,friendFunction 被声明为 MyClass 的友元函数,因此它可以访问 MyClass 的私有成员 privateMember

2. 友元类

class MyClass {
private:int privateMember;public:MyClass(int value) : privateMember(value) {}// 声明友元类friend class FriendClass;
};// 友元类可以访问私有成员
class FriendClass {
public:void accessPrivateMember(const MyClass& obj) {std::cout << "FriendClass accessing private member: " << obj.privateMember << std::endl;}
};int main() {MyClass obj(42);// 创建友元类的对象FriendClass friendObj;// 调用友元类的函数,访问私有成员friendObj.accessPrivateMember(obj);return 0;
}

在这个例子中,FriendClass 被声明为 MyClass 的友元类,因此它可以访问 MyClass 的私有成员。

如果一个类指定了友元类,则友元类的成员函数可以访问此类包括非公有成员在内的所有成员

3. 友元成员函数

class MyClass {
private:int privateMember;public:MyClass(int value) : privateMember(value) {}// 声明友元成员函数friend void FriendFunction(const MyClass& obj);
};// 定义友元成员函数,可以访问私有成员
void FriendFunction(const MyClass& obj) {std::cout << "Friend Function: " << obj.privateMember << std::endl;
}int main() {MyClass obj(42);// 调用友元成员函数FriendFunction(obj);return 0;
}

这个例子中,FriendFunction 被声明为 MyClass 的友元成员函数,允许它访问 MyClass 的私有成员。


友元关系不存在传递性

必须要注意的一点是,友元关系不存在传递性。也就是说,每个类负责控制自己的友元类或友元函数。(朋友的朋友不是我的朋友)


友元小结

  • 友元关系不能被继承(爸爸的朋友不一定是儿子的朋友)。
  • 友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。
  • 友元关系不具有传递性。若类B是类A的友元,类C是B的友元,类C不一定是类A的友元,同样要看类中是否有相应的声明。

使用友元机制需要注意,因为它打破了封装性,可能导致代码的耦合性增加。因此,在使用友元时应慎重考虑设计。友元的设计可以在某些情况下提供更灵活的访问权限,但通常应当优先考虑良好的封装性。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词