C++ 友元的“合理”的个人见解
扫描二维码
随时随地手机看文章
最早接触C++的时候,曾经在很多资料上不止一次的看到,应该尽量使用C++的低级特性去编程。 某些高级特性会导致问题,如模版会导致程序难以调试,友元会破坏程序封闭性。 可是C++之所以是一门优秀到完美的编程语言,绝非因为和一般面向对象语言的“普适”,相反,作为一个合格的程序员,应该学会掌握C++的高级特性,让自己的代码更加优美,让程序更加有效率。
黑格尔说“存在即合理”, 对于友元的“合理”, 我认为有如下几点:
1. 友元可以扩展类的功能。 对于一些结构固定、数据固定但是操作总是在更新的类,定义友元可以避免对该类的不断修改。因为友元可以访问私有变量, 这是它优于组合的一点,当然,也是一个缺陷; 仁者见仁,智者见智——它成为缺陷的唯一原因是:你用错了。
2. 友元可以表现一对多的关系。 这个一对多比较宽泛,既可以是“一个友元对象对应多个宿主对象”, 也可以是“一个友元类对应多个宿主类”; 当然,依旧有利有弊,只看使用者用法是否得当。
3. 友元可以更好的实现封装和复用。 如同1中所述,定义友元之后,如果情景发生改变,可以做到对原接口最小的更改。
一孔之见,希望读者批评指正。