C++中的友元的体会

来源:互联网 发布:冲淘宝客 编辑:程序博客网 时间:2024/04/29 19:54

友元:假设A中声明了B是我的朋友,则在B内就可以使用了我(A)的一切数据,包括private类型数据。

友元的出现破坏了类的封装和隐藏性。

 

C++中的友元分为:友元函数和友元类

1. 友元函数:

在类中声明,在类外定义:

class A

{

public: A(int i):m_i(i){}

private:

       friend void print(Aa);

       int m_i;

};

void print(A a)

{

       cout<<a.m_i<<endl;

}

 

也可以在类中定义:

class A

{

public: A(int i):m_i(i){}

private:

       friend void print(Aa)

    {

          cout<<a.m_i<<endl;

          //cout<<m_i<<endl;  error

    }

       int m_i;

};

 

注意:

1> 友元函数只是普通的外部函数,它不属于任何类。所以即使在类内定义它也不能直接访问类中的东西,必须通过对象访问。

2> 友元函数在类中的位置是任意的。在private和在public是没有区别的。

 

2. 友元类

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

class A

{

public: A(int i):m_i(i){}

private:

       friend class B;

       int m_i;

};

class B

{

public:

       void print(constA& a)

       {

              cout<<a.m_i<<endl;

       }

};

 

需要注意的几点:

(1) 友元关系不能被继承。

(2) 友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。

(3) 友元关系不具有传递性。若类B是类A的友元,类CB的友元,类C不一定是类A的友元,同样要看类中是否有相应的申明 

 

其实友元就可以翻译成朋友更好理解。同英语friend。

1 0
原创粉丝点击