标签:style color 使用 数据 sp on amp c size
友元:假设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。
标签:style color 使用 数据 sp on amp c size
原文地址:http://blog.csdn.net/u013696062/article/details/39080077