C++ 友元类

C++ 友元类1 在 C 中 我们使用类对数据进行了隐藏和封装 类的数据成员一般都定义为私有成员 成员函数一般都定义为公有的 以此提供类与外界的通讯接口 但是 有时需要定义一些函数 这些函数不是类的一部分 但又需要频繁地访问类的数据成员 这时可以将这些函数定义为该函数的友元函数 除了友元函数外 还有友元类 两者统称为友元 友元的作用是提高了程序的运行效率 即减少了类型检查和安全性检查等都需要时间开销 但它破坏了类的封装性和隐藏性 使得非成员函数可以访问类的私有成员 2 友元类 友元类的所有成员函数都是另一个类的友

1.在C++中,我们使用类对数据进行了隐藏和封装,类的数据成员一般都定义为私有成员,成员函数一般都定义为公有的,以此提供类与外界的通讯接口。但是,有时需要定义一些函数,这些函数不是类的一部分,但又需要频繁地访问类的数据成员,这时可以将这些函数定义为该函数的友元函数。除了友元函数外,还有友元类,两者统称为友元。友元的作用是提高了程序的运行效率(即减少了类型检查和安全性检查等都需要时间开销),但它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。

 使用友元类时注意: (1) 友元关系不能被继承。 (2) 友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。 (3) 友元关系不具有传递性。若类B是类A的友元,类C是B的友元,类C不一定是类A的友元,同样要看类中是否有相应的申明 
#include  
     using namespace std; class B; class A; void Show( A& , B& ); class B { 
    private: int tt; friend class A; friend void Show( A& , B& ); public: B( int temp = 100):tt ( temp ){ 
   } }; class A { 
    private: int value; friend void Show( A& , B& ); public: A(int temp = 200 ):value ( temp ){ 
   } void Show( B &b ) { 
    cout << value << endl; cout << b.tt << endl; } }; void Show( A& a, B& b ) { 
    cout << a.value << endl; cout << b .tt << endl; } int main() { 
    A a; B b; a.Show( b ); Show( a, b ); return 0; } 

(2)

#include  
     #include  
     using namespace std; //友元类 class cFriend { 
    private: int va; int vb; public: cFriend() { 
    va = 0; vb = 0; } cFriend(int a,int b) { 
    va = a; vb = b; } ~cFriend() { 
    cout << "执行结束!!!" << endl; } void set_va(int a) { 
    va = a; } void set_vb(int b) { 
    vb = b; } void disp(); friend class cFriends; }; class cFriends { 
    private: int x; int y; public: cFriends() { 
    x = 0; y = 0; } cFriends(int a, int b) { 
    x = a; y = b; } ~cFriends() { 
    cout << "友元类调用结束!!!" << endl; } void disps() { 
    cout << "友元类显示:" << endl; cout << " x = " << x << endl; cout << " y = " << y << endl; } void dispc(cFriend data); }; void cFriends::dispc(cFriend data) { 
    cout << "友元类访问:" << endl; cout << " va = " << data.va << endl; cout << " vb = " << data.vb << endl; } void cFriend::disp() { 
    cout << "成员函数调用:" << endl; cout << " va = " << va << endl; cout << " vb = " << vb << endl; } int main() { 
    cFriend data1(4, 5); cFriends data2(5, 6); data1.disp(); data2.disps(); data2.dispc(data1); return 0; } 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/204121.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午8:57
下一篇 2026年3月19日 下午8:57


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号