读书笔记_Effective_C++_条款二十三:宁以non-membernon-friend替换member函数
Posted Kooing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了读书笔记_Effective_C++_条款二十三:宁以non-membernon-friend替换member函数相关的知识,希望对你有一定的参考价值。
有下面一种情况
class A { private: int a; int b; public: A(int x, int y) :a(x), b(y){} void a_display(){ cout << a << endl; } void b_display(){ cout << b << endl; } };
你想输出全部的时候
member函数情况
void display(){cout<<a<<b<<endl;}
non-member
void display(A& a) { a.a_display(); a.b_display(): }
根据面向对象编程原则,数据和对象捆绑在一起
可能有违你的认知,应该使用non-member函数的形式
因为member对封装的冲击非常大,它可以直接调用里面的成员变量。暂时看上去它很简单,但不妨碍它以后变得膨胀。
与类内的关联,逻辑上看,这个函数就是类内函数的组合,放在类外会降低类的内聚性。
但书上向我们介绍了namespace的方法
using namespace std; class A { private: int a; int b; public: A(int x, int y) :a(x), b(y){} void a_display(){ cout << a << endl; } void b_display(){ cout << b << endl; } }; void display( A& a) { a.a_display(); a.b_display(); }
我还是第一次用
语法
A::A a(1, 3); A::display(a);
以上是关于读书笔记_Effective_C++_条款二十三:宁以non-membernon-friend替换member函数的主要内容,如果未能解决你的问题,请参考以下文章
读书笔记_Effective_C++_条款二十一:当必须返回对象时,别妄想返回其reference
读书笔记_Effective_C++_条款二十五: 考虑写出一个不抛出异常的swap函数
读书笔记_Effective_C++_条款二十四: 若所有参数皆需类型转换,请为此采用non-member函数
读书笔记_Effective_C++_条款十五:在资源类管理类中提供对原始资源的访问