现在的位置: 首页 > 综合 > 正文

c++友元

2013年09月21日 ⁄ 综合 ⁄ 共 900字 ⁄ 字号 评论关闭

    上一篇博文提到了访问权限,想到友元可以改变访问权限,在这里记录一下。

    友元用friend申请,其他类不可以访问本类型的私有成员,但是申请友元后侧可以访问。


    一般友元有3种形式:

    1)友元类  
2)
友元函数   3)友元成员函数

    

   1友元类
class A;//第一步申明友元类
class B//第二步定义要申请友元的类(在类中申明友元关系)
{
public:
	B(int _age):age(_age){}
	friend A;//申明友元关系
private:
	int age;
};

class  A//第三步定义友元类
{
public:
  void print(const B & b)
  {
	  cout<<"B.age=="<<b.age<<endl;
  }
};

    2友元函数
class B//第一步定义要申请友元的类(在类中申明友元关系)
{
public:
	B(int _age):age(_age){}
	friend void print(const B & b);//申明友元关系
private:
	int age;
};

//第二步定义友元函数
void print(const B & b)
{
   cout<<"B.age=="<<b.age<<endl;
}

   3友元成员函数(最麻烦的一个)
class B;//第一步申明要申请友元的类(因为友元类中要用到它)

class A//第二部可以定义友元类(类中的友元成员函数除外,因为它要用到申请友元类的成员,而暂时申请友元的类并没有定义)
{
public:
	A(){ cout<<"Run Constructor"<<endl;}
	void test(){cout<<"Run test"<<endl;}
	void print(const  B & b);//申明类中友元成员函数,只是申明
};

class B//第三步定义要申请友元的类(在类中申明友元关系)
{
public:
	B(int _age):age(_age){}
	friend void A::print(const B & b);//申明友元关系
private:
	int age;
};

//第四部定义友元成员函数
void A::print(const B & b)
{
   cout<<"B.age=="<<b.age<<endl;
}

   

抱歉!评论已关闭.