C++之友元
2019-02-25 16:09:22来源:博客园 阅读 ()
类可以允许其他类或者函数访问他的非公有成员,方法是令其他类或者函数成为他的友元(friend)。
友元的声明:
友元声明只能出现在类的内部,但是在类内出现的具体位置不限;由于友元不是类的成员,所以不受所在区域访问控制级别的约束。
友元的声明并非传统意义上的声明,所以为了能够正确的调用该友元函数,还须在类的外面独立声明该函数。
令函数作为友元:
如果想要让一个外部函数add使用类A的非公有成员,可以让函数add做类A的友元函数,例如:
class A{ friend void add(); //类A的剩余部分; }
注:因为add()函数是类A的友元函数,所以可以在add()函数的定义中使用类A的非公有成员,但是必须是先定义类A,包括对于add的友元声明;然后再定义add函数,此时它才能使用类A的成员。
令类作为友元:
如果想要让类B使用类A的非公有成员,可以让类B做类A的友元类,例如:
class A{ friend class B; //类A的剩余部分; }
注:友元关系不存在传递性,例:类B是类A的友元类,函数C是类B的友元函数,但是函数C并不能访问类A的非共有成员。
缺点:这会导致类B中的每个成员函数(包括稍后添加的函数)都可以访问类A的私有成员,所以,最好只把需要访问类A私有成员的成员函数声明为友元。
令成员函数作为友元:
为了解决类作为友元的缺陷,我们可以让特定的类成员函数作为友元,例如:
class A{ friend void B::add(); //类A的剩余部分; }
注:在把成员函数作为友元时需要注意类A、类B、成员函数add的声明以及定义顺序。
函数重载:
由于重载函数仍然是不同的函数,因此,如果想要把一组重载函数都声明成友元,则需要对这组函数中的每一个分别声明,例如:
void add(int arg); void add(double arg); class A{ friend void add(int arg); //类A的剩余部分; }
只有参数为int的add函数能使用类A的非公有成员。
原文链接:https://www.cnblogs.com/silly-truman/p/10403637.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- C++ 转换函数搭配友元函数 2020-06-10
- C++ 自动转换和强制类型转换(用户自定义类类型) 2020-06-10
- C++ rand函数 2020-06-10
- C++ 友元函数 2020-06-10
- C++ 运算符重载 2020-06-10
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash