友元分为:友元函数和友元类
友元提供了一种突破封装的方式,有时提供了便利。但是友元会增加耦合度,破坏了封装,所以友元不宜多用。
友元函数 可以 直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在类的内部声明,声明时需要加friend
关键字。
const
修饰友元函数可以在类定义的任何地方声明,不受类访问限定符限制一个函数可以是多个类的友元函数友元函数的调用与普通函数的调用和原理相同friend ostream& operator<<(ostream& _cout, const date& d);friend istream& operator>>(istream& _cin, date& d);
cout的输出流对象和隐含的this指针再抢占第一个参数的位置。this
指针默认是第一个参数也就是左操作数。 但是实际使用中cout
需要是第一个形参对象, 才能正常使用。
所以要将operator<<
重载成全局函数。但是这样的话,又会导致类外没办法访问成员。所以这里就需要友元来解决。
友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。
友元关系是单向的,不具有交换性友元关系不能传递如果b是a的友元,c是b的友元,则不能说明c时a的友元。
clas经典寓言s a;class b;class a {// 声明b类为a类的友元类,则在b类中就直接访问a类中的私有成员变量friend class b;public:a (int a = 0):_a(a){}private:int _a;};class b {public:b(int b = 0):_b(b){}void ta(int a){// 直接访问a类私有的成员变量_aa._a = a;}private:int _b;a _aa;};
如果b不是a的友元类,报错。
如果一个类定义在另一个类的内部,这个内部类就叫做内部类。
此时这个内部类是一个独立的类,他不属于外部类,更不能通过外部类的对象去调用内部类。外部类对内部类没有任何优越的访问权限。
注:
内部类就是外部类的友元类。
内部类可以通过外部类的对象参数来访问外部类中的所有成员,但是外部类不是内部类的友元。
内部类可以定义在 外部类的public
、protected
、private
内部类可以直接访问外部类中的static
,枚举成员,不需要外部类的对象或者类名sizeof(外部类) = 外部年度计划表类
,和内部类没有关系class a {priva世界杯对阵表te:int _a;static int _k;public:class b {public :void print(const a& aa){cout << aa._a << endl;cout << _k << endl;}};a(int a = 10):_a(a){}};int a::_k = 0;int main(){a::b bb;bb.print(a());return 0;}
输出:
10
0
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注www.887551.com的更多内容!
本文发布于:2023-04-04 18:03:02,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/b125c3548048480b23f2b5c1c8ac3cd4.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:C++的友元和内部类你了解吗.doc
本文 PDF 下载地址:C++的友元和内部类你了解吗.pdf
留言与评论(共有 0 条评论) |