二十二、C++程序设计必知:友元

本文介绍了C++中的友元机制,包括友元函数和友元类的概念及其使用方式。通过示例代码展示了如何声明和定义友元函数及友元类,并说明了友元关系的特点。
	友元提供了一种不同类或对象的成员函数之间类的成员函数和普通函数之间的数据共享机制。很明显这破坏了类的数据隐藏性。所以我们在平时使用时要在共享和封装间平衡一下。
	如果友元是普通函数或类的成员函数,则叫做友元函数。
	如果友元是类,则叫友元类。类的所有成员函数均为友元函数。
1、友元函数
#include<iostream>
using namespace std;
class Data
{
public: //公有接口
         Data(intx){i=x;}
         intGetVal(){return i;}
friend intadd(Data& a,Data& b);  //普通函数声明为友元函数
//虽然不是本类函数,但是可以访问该类对象的私有和保护成员
private:
         inti;
};
int add(Data& a,Data& b)  //定义
{
         return(a.i+b.i);    //正常情况下,对象a,b只能通过GetVal()接口来访问私有数据成员
         //声明为友元函数后直接对象名访问了私有成员
}
int main()
{
         Dataa(1),b(2);
         cout<<add(a,b)<<endl;//3
         return0;
}

2、友元类
和友元函数一样。比如类B是类A的友员类,则类B所有的成员函数都是类A的友员函数,可以访问类A的私有或保护成员。
class A
{
public:
         voidshowA(){cout<<x<<endl;}
         friendclass B; //B定义为A的友元类
private:
         intx;
};
class B
{
public:
         voidSetVal(int i);
         voidshowB();
private:
         Aa;
};
void B::SetVal(int i)
{
         a.x=i;//友员类B的成员函数可以访问类A的私有成员
}
void B::showB()
{
         a.showA();
}

这里需要注意的是:1、友员关系不能传递。如类B是类A的友元,类C为类B的友元。类C和类A没有任何友元关系。2、友元关系是单向的。如B是A的友元。B可以访问A的私有成员,但反过来A是不能访问B的私有成员的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值