Chinaunix首页 | 论坛 | 博客
  • 博客访问: 64471
  • 博文数量: 32
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 255
  • 用 户 组: 普通用户
  • 注册时间: 2016-12-02 09:11
文章分类

全部博文(32)

文章存档

2017年(21)

2016年(11)

我的朋友

分类: C/C++

2017-01-13 16:45:23

转自:http://blog.csdn.net/u013696062/article/details/39080077
友元:假设A中声明了B是我的朋友,则在B内就可以使用了我(A)的一切数据,包括private类型数据。友元的出现破坏了类的封装和隐藏性。

C++中的友元分为:友元函数和友元类。
1. 友元函数:
在类中声明,在类外定义:
  1. class A
  2. {
  3. public: A(int i):m_i(i){}

  4. private:

  5.       friend void print(Aa);
  6.       int m_i;
  7. };

  8. void print(A a)
  9. {
  10.       cout<<a.m_i<<endl;
  11. }
也可以在类中定义:

  1. class A
  2. {
  3. public: A(int i):m_i(i){}
  4. private:

  5.    friend void print(Aa)
  6.    {
  7.          cout<<a.m_i<<endl;
  8.          //cout<<m_i<<endl; error
  9.    }
  10.       int m_i;
  11. };
注意:
1> 友元函数只是普通的外部函数,它不属于任何类。所以即使在类内定义它也不能直接访问类中的东西,必须通过对象访问。
2> 友元函数在类中的位置是任意的。在private和在public是没有区别的。

2. 友元类
        当类A中声明类B是我的友元时,则在类B内,所有成员函数都是类A的友元函数,也就是说所有成员函数都可以访问类A的一切资料。(同理通过A的对象访问)


  1. class A
  2. {
  3. public: A(int i):m_i(i){}
  4. private:
  5.       friend class B;
  6.       int m_i;
  7. };

  8. class B
  9. {
  10. public:
  11.       void print(constA& a)
  12.       {
  13.              cout<<a.m_i<<endl;
  14.       }
  15. };
需要注意的几点:
(1) 友元关系不能被继承。
(2) 友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。
(3) 友元关系不具有传递性。若类B是类A的友元,类C是B的友元,类C不一定是类A的友元,同样要看类中是否有相应的申明

其实友元就可以翻译成朋友更好理解。同英语friend。
阅读(838) | 评论(0) | 转发(0) |
0

上一篇:DLL整理

下一篇:IP MASK 实例

给主人留下些什么吧!~~