Effective C++条項23
2128 ワード
むしろnon-member、non-friendでmember関数を置き換える
このセクションでは,著者らは,いくつかの機能を実装する際に,非メンバー関数を選択し,非友元関数であることに偏るべき理由を述べた.このように一言まとめると,クラスのパッケージング性を最大限に実現することである.
パッケージは表示されないことを意味します.多くのものがカプセル化され、少ない人がそれを見ることができるようになればなるほど、私たちはそれを変える弾力性があります.コードが少なければ少ないほどデータ(アクセスデータ)が表示され、多くのデータがカプセル化され、オブジェクトデータを変更する自由が得られます.多くの関数がアクセスできるほど、データのカプセル化性は低くなります.
前節でprivateデータメンバーを宣言したのもクラスのカプセル化を実現するためであることを知っています.パッケージが丈夫なクラスにとって重要であることがわかります.
以上が著者の知識の核心である.
パッケージングを実現するために,著者らはnamespace技術を導入したが,この技術は興味深い.次のコード
このセクションでは,著者らは,いくつかの機能を実装する際に,非メンバー関数を選択し,非友元関数であることに偏るべき理由を述べた.このように一言まとめると,クラスのパッケージング性を最大限に実現することである.
パッケージは表示されないことを意味します.多くのものがカプセル化され、少ない人がそれを見ることができるようになればなるほど、私たちはそれを変える弾力性があります.コードが少なければ少ないほどデータ(アクセスデータ)が表示され、多くのデータがカプセル化され、オブジェクトデータを変更する自由が得られます.多くの関数がアクセスできるほど、データのカプセル化性は低くなります.
前節でprivateデータメンバーを宣言したのもクラスのカプセル化を実現するためであることを知っています.パッケージが丈夫なクラスにとって重要であることがわかります.
以上が著者の知識の核心である.
パッケージングを実現するために,著者らはnamespace技術を導入したが,この技術は興味深い.次のコード
**// S.h**
#include<iostream>
namespace myclass {
class S {
public:
S(int n):value(n){}
void set(int v)
{
value=v;
}
void get()
{
std::cout<<value;
}
void prit()
{
std::cout<<"****";
}
private:
int value;
};
}
**//S1.h**
#include"S.h"
namespace myclass {
void p1(S s)
{
s.get();
}
}
**//main.cpp**
#include"S1.h"
int main()
{
myclass::S s(10);
myclass::p1(s);
}