转自:
http://blog.csdn.net/u013696062/article/details/39080077
友元:假设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的友元,类C是B的友元,类C不一定是类A的友元,同样要看类中是否有相应的申明
其实友元就可以翻译成朋友更好理解。同英语friend。
阅读(838) | 评论(0) | 转发(0) |