友元提供了一种不同类或对象的成员函数之间、类的成员函数和普通函数之间的数据共享机制。很明显这破坏了类的数据隐藏性。所以我们在平时使用时要在共享和封装间平衡一下。 如果友元是普通函数或类的成员函数,则叫做友元函数。 如果友元是类,则叫友元类。类的所有成员函数均为友元函数。 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的私有成员的。
二十二、C++程序设计必知:友元
最新推荐文章于 2022-10-13 15:53:31 发布
本文介绍了C++中的友元机制,包括友元函数和友元类的概念及其使用方式。通过示例代码展示了如何声明和定义友元函数及友元类,并说明了友元关系的特点。
3262

被折叠的 条评论
为什么被折叠?



