Cpp クラス アクセス指定子 新しいページはコチラ
提供: yonewiki
(→クラス アクセス指定子) |
(→クラス アクセス指定子) |
||
37行: | 37行: | ||
Access_Specifiers001.h | Access_Specifiers001.h | ||
<syntaxhighlight lang="cpp" line start="1"> | <syntaxhighlight lang="cpp" line start="1"> | ||
− | class | + | class CAccess_Specifiers001{ |
− | int | + | int m_nValue; //★1.メンバ変数 省略されている場合はprivate: |
− | + | ||
public: //★2.この宣言からpublic: | public: //★2.この宣言からpublic: | ||
+ | int mpub_nValue; | ||
+ | |||
void Set_m_nValue(int nSetValueP);//メンバ関数 | void Set_m_nValue(int nSetValueP);//メンバ関数 | ||
int Get_m_nValue(); | int Get_m_nValue(); | ||
− | |||
protected: //★3.この宣言からprotected: | protected: //★3.この宣言からprotected: | ||
− | void | + | wchar_t m_wcUnit; |
− | void | + | |
+ | void mf_m_nValue1000x(); | ||
+ | void mf_m_nValuePermil(); | ||
+ | |||
private: //★4.明示的なprivate: | private: //★4.明示的なprivate: | ||
− | int | + | int m_nManipulatorCnt; |
59行: | 63行: | ||
}; | }; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | Access_Specifiers001.cpp | ||
+ | <syntaxhighlight lang="cpp" line start="1"> | ||
+ | #include "stdafx.h" | ||
+ | #include "Access_Specifiers001.h" | ||
+ | |||
+ | void CAccess_Specifiers001::Set_m_nValue(int nSetValueP){ | ||
+ | m_nValue = nSetValueP; | ||
+ | } | ||
+ | |||
+ | int CAccess_Specifiers001::Get_m_nValue(){ | ||
+ | return m_nValue; | ||
+ | } | ||
+ | |||
+ | void CAccess_Specifiers001::mf_m_nValue1000x(){ | ||
+ | m_nValue = m_nValue * 1000; | ||
+ | m_nManipulatorCnt++; | ||
+ | } | ||
+ | |||
+ | void CAccess_Specifiers001::mf_m_nValuePermil(){ | ||
+ | m_nValue = m_nValue / 1000; | ||
+ | m_nManipulatorCnt--; | ||
+ | } | ||
+ | |||
+ | CAccess_Specifiers001::CAccess_Specifiers001(void) | ||
+ | { | ||
+ | } | ||
+ | |||
+ | |||
+ | CAccess_Specifiers001::~CAccess_Specifiers001(void) | ||
+ | { | ||
+ | } | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | という具合のサンプルクラスを作ってみました。サンプルの割に長くなってしまいましたが、なんとなく1000倍したり1000分の1にしたりするだけの操作をするクラスです。今のところ欠陥だらけのクラスになっています。 | ||
+ | |||
+ | |||
+ | まずはアクセス指定子の具体的な利用部分について説明しておきます。 | ||
+ | |||
+ | ★1.部分のようにアクセス指定子を記述しないでクラスの中の定義を書き始めると、その部分はprivateを指定したのと同じ意味で変数や関数が定義されます。クラス内部からしか呼び出し出来ないという表現をしましたが、内部というキーワードについてはもう少し後での説明になります。変数名のプレフィックス(接頭語)としてm_をつけるのはクラスの使い方における基本的な変数命名法として定着しているものです。あとは自分独自の命名法になります。このWikiの記事を最初から全部読んでいる人には、管理人の独自の命名法について説明したと思いますので、それについては割愛します。変数名の付け方は自由です。ちょっとわかりにく日本語を使うなら任意(にんい)ともいいますね。 | ||
+ | |||
+ | |||
+ | 次に | ||
+ | |||
+ | ★2.部分で具体的にアクセス指定子を明示した部分が登場します。 | ||
+ | |||
+ | アクセス指定子''':''' | ||
+ | |||
+ | のように:を使って終端を修飾します。この指定の後ろからアクセス指定の意味が変更されるということになります。ここではpublicを指定したので、この先で指定した関数や変数からは、クラスの外部からも呼び出し出来ることになります。外部というキーワードについても後程の説明になります。 | ||
+ | |||
+ | |||
+ | そして | ||
+ | |||
+ | ★3.部分には新たにprotectedのアクセス指定子を使いました。内部と継承で派生したクラスから呼び出せる変数や関数の定義になります。 | ||
+ | |||
+ | |||
+ | 最後に | ||
+ | |||
+ | ★4.部分でprivateのアクセス指定子を使っています。またクラス内部だけの呼び出しが許される変数や関数の定義に切り替わります。このように何度でもアクセス指定子は使えます。繰り返し使えますが、通常はまとめて記述する人が多いです。何の設計図もなく、1000倍や1000分の1倍するような機能を持つクラスを作り、適当にアクセス指定子を割り振っていますので、この先、都合が悪くなるとアクセス指定子の設定を変更するかもしれません。今のところ、1000分の1にしたとき小数になるから、int型だけだと都合が悪くなりそうなことだけは気づいてますが、そのままにしています。あとでプログラムを変更することになるでしょう。 | ||
+ | |||
+ | |||
+ | たったこれだけの説明で、これだけ長くなってしまいました。記事全体が相当長くなりそうな気配がぷんぷんとしてきました。基本中の基本のことがらをこれだけ冗長的に説明するのは体が持たないような気がしますし、読んでる人も疲れるから、あまり良い記事にはならない気がしますね。 | ||
+ | |||
+ | |||
+ | '''ついてこれるヤツだけ、ついて来い!'''(なんつって、振り返ったら誰もついてきてない感じの風景が明確に想像できます。) |