C++中的友元关系

浅谈C++中的友元关系 在封装中C++类数据成员大多情况是private属性;但是如果接口采用多参数实现肯定影响程序效率;然而这时候如果外界需要频繁访问这些私有成员,就不得不需要一个既安全又理想的“后门”——友元关系; C++中提供三种友元关系的实现方式,友元函数、友元成员函数、友元类。 友元函数:既将一个普通的函数在一个类中说明为一个friend属性;其定义(大多数会访问该类的成员)应在类后; 友元成员函数:既然是成员函数,那么肯定这个函数属于某个类,对了就是因为这个函数是另外一个类的成员函数,有时候因为我们想用一个类通过一个接口去访问另外一个类的信息,然而这个信息只能是被它授权的类才能访问;那么也需要用friend去实现;这个概念只是在声明的时候稍有变化; 友元类:友元类声明会将整个类说明成为另一个类的友元关系;和之前两种的区别是集体和个人的区别;友元类的所有成员函数都可以是另一个类的友元函数; 值得注意的是友元关系是单向的,有点像我们恋爱中出现的单相思 O(∩_∩)O,单向关系就是说如果A被说明成B的友元关系,那么只能说A是B的友元,并不代表B是A的友元;其次在多数情况下友元关系的函数都会访问它被说明中类的成员,这时候应该将函数定义在类的后面; 下面给一个简单的例程代码; 1 #include 2 3 using namespace std; 4 5 class B; 6 7 class A{ 8 private: 9 int x; 10 public: 11 A(); 12 void display(B &); 13 }; 14 15 class C; 16 17 class B{ 18 private: 19 int y; 20 int z; 21 public: 22 B(); 23 B(int, int); 24 friend void A::display(B &);//友元成员函数 25 friend void display(B &);//友元函数 26 friend class C;//友元类 27 }; 28 29 class C{ 30 private: 31 int sum; 32 void calc(B &); 33 public: 34 C(); 35 void display(B &); 36 }; 37 38 //必须在友元关系的类后进行定义 39 void display(B &v)//友元函数 40 { 41 cout << v.y << " " << v.z << endl; 42 } 43 44 A::A() 45 { 46 this->x = 0; 47 } 48 49 void A::display(B &v)//友元成员函数 50 { 51 this->x = v.y + v.z; 52 cout << this->x << endl; 53 } 54 55 B::B() 56 { 57 this->y = 0; 58 this->z = 0; 59 } 60 61 B::B(int y, int z) 62 { 63 this->y = y; 64 this->z = z; 65 } 66 67 C::C() 68 { 69 sum = 0; 70 } 71 72 void C::display(B &v) 73 { 74 this->calc(v); 75 cout << sum << " = " << v.y << " + " << v.z << endl; 76 } 77 78 void C::calc(B &v) 79 { 80 sum = v.y + v.z; 81 } 82 83 int main() 84 { 85 A a; 86 B b(2, 3); 87 display(b); 88 a.display(b); 89 C c; 90 c.display(b); 91 92 return 0; 93 } 94

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值