友元的简单使用

//测试友元的使用(1)


C++编程中如果需要访问非本类的私有成员,那么就需要用到友元。否则私有成员是无法被外部直接访问的,而友元可以被定义为友元函数和友元类,即指定某函数或类直接访问私有类.(友元从某种程度上来说破坏了OOP的数据封装的原则,所以友元要慎用)


友元的使用也非常简单。只需要在引入类中的其他类或函数前面加上关键字friend即可。
例如
class Test
{
private:
friend class XusWorld;
public:
friend void XusWorld();
};
写在private 或 protected 或 public 下的效果相同。


下面看例子:
//测试友元的使用
#include <iostream>
#include <string>
#include <iomanip>


using std::string;
using std::cout;
using std::endl;
using std::setw;


class Tom;   //前项声明
class Jerry;   //前项声明
void Happy(Tom & tom, Jerry & jerry);  //声明友元函数


class Tom
{
private:
string  name;
public:
friend class Jerry; //友元类的声明
friend void Happy(Tom &, Jerry &); //友元函数的声明


public:
Tom()
{
name = "LittleTom";
}
Tom(string & name)
{
this -> name = name;
}
};


class Jerry
{
private:
string name;
Tom  tom;
int age;
public:
friend void Happy(Tom &, Jerry &);
public:
Jerry(): age(15)
{
name = "LittleJerry";


}
Jerry(string & name)
{
this -> name = name;
}


void showFriendship()
{
cout << "Jerry said "<<tom.name <<" is my friend."<< endl;
}
};


void Happy(Tom & tom, Jerry & jerry)
{
cout << tom.name << " and "<<jerry.name << setw(12)<<"is happy !" << endl;
}


int main()

string tomname("Tom"); //初始化两个string类对象。
string jerryname("Jerry"); //
Tom tom( tomname );
Jerry jerry( jerryname );
Happy(tom, jerry); //调用happy函数


jerry.showFriendship (); //调用Jerry类的showFriendShip()函数
return 0;
}


这是一段完整的代码测试了友元类的简单使用。读者也可以尝试自己更改程序内容来体验友元的特性。




友元的注意事项:
1:弄清楚谁是谁的友元?friend class Jerry; 该行代码说明了Jerry是Tom的友元,因此Jerry才能获得访问Tom成员的权限。举个简单的例子,Tom 说 Jerry 是他的朋友, Jerry才能进Tom家里(类体内)吃奶酪(类成员),而不能因为Herry说自己是Tom的友元,就可以进Tom家里大吃大喝,这在逻辑上也是行不通的。友元关系是不可逆的,
2:友元关系是不能传递。
3:友元关系是不能被继承的。
4:慎用友元。
日期 2014/11/13
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值