C++之友元函数friend

出于信息隐藏的目的,类的数据成员一般定义为私有成员,并通过公有函数对外提供访问接口。但有时需要定义一些函数,这些函数不是类的一部分,但又需要访问类的数据成员,这样可将这些函数定义为该类的友元函数。除了友元函数外,还有友元类,它们被统称为友元。友元的作用是提高程序的执行效率,但也牺牲了类的封装性。

#include"string.h"
#include<iostream>
#include<iomanip>
using namespace std;

class Stu
{
 char name[10];
 int deg;
 char level[10];
public:
 Stu(char na[],int d)
 {
  strcpy(name,na);
  deg=d;
 }

 char *getname()
 {
  return name;
 }

 //friend 函数类型 友元函数名(参数表)   
 //友元函数trans(),友元函数是拥有成员函数一切权利的非成员函数,
 //也就是说,友元函数不是类的成员函数,但是它可以像成员函数一样直接访问类的私有成员(包括私有数据成员和成员函数)。
 //为了使一个函数成为类的友元函数,必须在类的声明中指明。声明友元函数的方式是在类中用关键词friend声明该函数
 //要想通过某个友元函数访问一个类,必须要把该友元函数声明在该类中。可以在类的任意位置,意义完全一样,除了类之外。
 //但是它的定义既可以放在类的外部也可以是内部。一般与类的成员函数定义在一起。

 friend void trans(Stu &s)
 {
  if(s.deg>=90)
   strcpy(s.level,"优");
  else if(s.deg>=80)
   strcpy(s.level,"良");
  else if(s.deg>=70)
   strcpy(s.level,"中");
  else if(s.deg>=60)
   strcpy(s.level,"及格");
  else
   strcpy(s.level,"不及格");
 }
 void disp()
 {
  cout<<" "<<name<<","<<deg<<","<<level<<endl;
 }
};

void main()
{
 Stu st[]={Stu("王虎",76),Stu("林燕风",54),Stu("张鹏",97),Stu("孙涛",84),Stu("马灵",69),Stu("长城",68)};
 cout<<"成绩结果:"<<endl;
 for(int i=0;i<6;i++)
 {
  trans(st[i]);
  st[i].disp();
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值