C++ 友元(1)

C++ 友元(1),第1张

全局函数做友元

在程序里,有些私有属性 也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术

友元的目的就是让一个函数或者类 访问另一个类中私有成员进行访问,就需要用到友元的技术

友元关键字:friend

友元的三种实现:

  • 全局函数做友元

  • 类做友元

  • 成员函数做友元

//建筑物类
class Building{
  //goodGay全局函数是 Building好朋友,可以访问Building中私有成员
  friend void goodGay(Building *building);
  public:
  Building(){
    m_SittingRoom = "客厅";
    m_BedRoom = "卧室";
  }
  public:
  	string m_SittingRoom;	//客厅
  
  private:
    string m_BedRoom;	//卧室
};

//全局函数
void goodGay(Building *building){
  cout << "朋友的全局函数 正在访问: "<< building -> m_SittingRoom << endl;
  
  cout << "朋友的全局函数 正在访问: "<< building -> m_BedRoom << endl;	
}

void test01(){
  Building building;
  goodGay(&building);
}

int main(){
  test01();
}
类做友元
//类做友元
class Building;
class GoodGay{
  public:
  GoodGay();
  void visit();	//参观函数 访问Building中的属性
  Building *building;
};

class Building{
  //告诉编译器 goodGay类是Building类的好朋友,可以访问到Building类中私有内容
  friend class goodGay;
  
  public:
  Building();
  
  public:
  string m_SittingRoom;	//客厅
  
  private:
  string m_BedRoom;	//卧室
}

//类外写成员函数
Building::Building(){
  m_SittingRoom = "客厅";
  m_BedRoom = "卧室";
}

GoodGay::GoodGay(){
	//创建建筑物对象
  building = new Building;
}

void GoodGay::visit(){
	cout << "好基友正在访问:" << building->m_SittingRoom << endl;
}

void test01(){
  GoodGay gg;
  gg.visit();
}
成员函数做友元
class Building;		//类声明
class GoodGat{
  public:
  	GoodGay();
  	Building * building;
  	
  	void visit();	//让visit函数可以访问Building中私有成员
 		void visit2();	//让visit2函数不可以访问Building中私有成员
  	
};

//类外实现成员函数
Building::Building(){
	m_SittingRoom = "客厅";
  m_BedRoom = "卧室";
}

GoodGay::GoodGay(){
  building = new Building;
}

void GoodGay::visit(){
  cout << "visit函数正在访问:" <m_SittingRoom << endl;
}
void GoodGay::visit2(){
  cout << "visit函数正在访问:" <m_SittingRoom << endl;
}


class Building{
  //告诉编译器 GoodGay类下的visit成员函数作为本类的好朋友,可以
  friend void GoodGay::visit();
  
  public:
  Building();
  
  public:
  	string m_SittingRoom;	//	客厅
  	
  private:
  	string m_BedRoom;	//卧室
};

void test01(){
  GoodGay gg;
  gg.visit();
  gg.visit2();
}

int main(){
  test01();
}

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/562458.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-01
下一篇 2022-04-01

发表评论

登录后才能评论

评论列表(0条)

保存