Cpp クラス メンバ関数 新しいページはコチラ
提供: yonewiki
(→クラス メンバ関数) |
(→クラス メンバ関数) |
||
| 42行: | 42行: | ||
void CMemberVar001::mf_Print(void){ | void CMemberVar001::mf_Print(void){ | ||
printf("CMemberVar001 プライベート メンバ関数\n"); | printf("CMemberVar001 プライベート メンバ関数\n"); | ||
| − | printf("mpub_nValue=% | + | printf("mpub_nValue=%10d,mpro_nValue=%10d,m_nValue=%10d\n",mpub_nValue, mpro_nValue, m_nValue); |
printf("\n"); | printf("\n"); | ||
| 53行: | 53行: | ||
void CMemberVar001::mfpro_Print(void){ | void CMemberVar001::mfpro_Print(void){ | ||
printf("CMemberVar001 プロテクト メンバ関数\n"); | printf("CMemberVar001 プロテクト メンバ関数\n"); | ||
| − | printf("mpub_nValue=% | + | printf("mpub_nValue=%10d,mpro_nValue=%10d,m_nValue=%10d\n",mpub_nValue, mpro_nValue, m_nValue); |
printf("\n"); | printf("\n"); | ||
| 63行: | 63行: | ||
void CMemberVar001::mfpub_Print(void){ | void CMemberVar001::mfpub_Print(void){ | ||
printf("CMemberVar001 パブリック メンバ関数\n"); | printf("CMemberVar001 パブリック メンバ関数\n"); | ||
| − | printf("mpub_nValue=% | + | printf("mpub_nValue=%10d,mpro_nValue=%10d,m_nValue=%10d\n",mpub_nValue, mpro_nValue, m_nValue); |
printf("\n"); | printf("\n"); | ||
| 83行: | 83行: | ||
CMemberVar001::CMemberVar001(void) | CMemberVar001::CMemberVar001(void) | ||
{ | { | ||
| + | printf("■CMemberVar001コンストラクタ mf_Printプライベート関数アクセス可能\n"); | ||
| + | m_nValue = 2000; | ||
| + | mf_Print(); | ||
| + | printf("■CMemberVar001コンストラクタ 処理終了\n"); | ||
} | } | ||
| 94行: | 98行: | ||
| − | + | それで、新しく以下のような派生クラスを作りました。派生クラスの作り方は[[Cpp クラス アクセス指定子|アクセス指定子]]の項目で中盤あたりに画像を貼って説明しました。よくわからない人は、もどって確かめてください。 | |
| + | |||
| + | MemberFunc001.h | ||
| + | <syntaxhighlight lang="cpp" line start="1"> | ||
| + | #pragma once | ||
| + | #include "membervar001.h" | ||
| + | class CMemberFunc001 : | ||
| + | public CMemberVar001 | ||
| + | { | ||
| + | public: | ||
| + | void mfpub_DerivationPrint(void); | ||
| + | CMemberFunc001(void); | ||
| + | ~CMemberFunc001(void); | ||
| + | }; | ||
| + | |||
| + | |||
| + | </syntaxhighlight> | ||
| + | MemberFunc001.cpp | ||
| + | <syntaxhighlight lang="cpp" line start="1"> | ||
| + | #include "stdafx.h" | ||
| + | #include "MemberFunc001.h" | ||
| + | |||
| + | void CMemberFunc001::mfpub_DerivationPrint(void){ | ||
| + | //mf_nValue;★privateで定義された領域にある変数にはアクセスできない。 | ||
| + | //mf_Print();★privateで定義された領域にある関数にはアクセスできない。 | ||
| + | |||
| + | mpro_nValue = 1100;//★protectedで定義された領域にある変数は呼び出せる。 | ||
| + | mfpro_Print();//★protectedで定義された領域にある関数は呼び出せる。 | ||
| + | } | ||
| + | CMemberFunc001::CMemberFunc001(void) | ||
| + | { | ||
| + | } | ||
| + | |||
| + | |||
| + | CMemberFunc001::~CMemberFunc001(void) | ||
| + | { | ||
| + | } | ||
| + | |||
| + | </syntaxhighlight> | ||
| + | と言う具合にプログラムを追記しました。しれっとMemberVar001.cppもメンバ変数の記事での内容から少し変更しました。 | ||
| + | |||
| + | |||
| + | そして、メインプログラムを以下のように記述して利用します。派生クラスを使った分だけ出力も多くなりました。なんだか複雑な動きをしているように感じますが、どういう風に動作したのかは、あとで解説をつけたいと思います。 | ||
| + | |||
| + | |||
| + | sample_main.cpp | ||
| + | <syntaxhighlight lang="cpp" line start="1"> | ||
| + | #include "stdafx.h" | ||
| + | #include "MemberVar001.h" | ||
| + | #include "MemberFunc001.h" | ||
| + | |||
| + | int _tmain(int argc, _TCHAR* argv[]) | ||
| + | { | ||
| + | CMemberVar001* CMemberVar001_Instance = new CMemberVar001; | ||
| + | |||
| + | CMemberVar001_Instance->mpub_nValue = 100; | ||
| + | CMemberVar001_Instance->mfpub_Print(); | ||
| + | |||
| + | |||
| + | printf("★★ここから継承クラスの利用\n"); | ||
| + | CMemberFunc001* CMemberFunc01_Instance = new CMemberFunc001; | ||
| + | CMemberFunc01_Instance->mpub_nValue = 1000; | ||
| + | CMemberFunc01_Instance->mfpub_Print(); | ||
| + | printf("★★★継承クラス内の関数呼び出し\n"); | ||
| + | CMemberFunc01_Instance->mfpub_DerivationPrint(); | ||
| + | printf("★★ここまで継承クラスの利用\n"); | ||
| + | |||
| + | return 0; | ||
| + | } | ||
| + | </syntaxhighlight> | ||
| + | 出力結果 | ||
| + | <syntaxhighlight lang="text" line start="1"> | ||
| + | ■CMemberVar001コンストラクタ mf_Printプライベート関数アクセス可能 | ||
| + | CMemberVar001 プライベート メンバ関数 | ||
| + | mpub_nValue=-842150451,mpro_nValue=-842150451,m_nValue= 2000 | ||
| + | |||
| + | CMemberVar001 mf_Print関数から呼び出し | ||
| + | ★CMemberVar001 プロテクト mfpub_Print2関数 | ||
| + | ★CMemberVar001 パブリック mfpub_Print2関数 | ||
| + | |||
| + | ■CMemberVar001コンストラクタ 処理終了 | ||
| + | CMemberVar001 パブリック メンバ関数 | ||
| + | mpub_nValue= 100,mpro_nValue=-842150451,m_nValue= 2000 | ||
| + | |||
| + | CMemberVar001 mfpub_Print関数から呼び出し | ||
| + | ★CMemberVar001 プライベート mfpub_Print2関数 | ||
| + | ★CMemberVar001 プロテクト mfpub_Print2関数 | ||
| + | |||
| + | ★★ここから継承クラスの利用 | ||
| + | ■CMemberVar001コンストラクタ mf_Printプライベート関数アクセス可能 | ||
| + | CMemberVar001 プライベート メンバ関数 | ||
| + | mpub_nValue=-842150451,mpro_nValue=-842150451,m_nValue= 2000 | ||
| + | |||
| + | CMemberVar001 mf_Print関数から呼び出し | ||
| + | ★CMemberVar001 プロテクト mfpub_Print2関数 | ||
| + | ★CMemberVar001 パブリック mfpub_Print2関数 | ||
| + | |||
| + | ■CMemberVar001コンストラクタ 処理終了 | ||
| + | CMemberVar001 パブリック メンバ関数 | ||
| + | mpub_nValue= 1000,mpro_nValue=-842150451,m_nValue= 2000 | ||
| + | |||
| + | CMemberVar001 mfpub_Print関数から呼び出し | ||
| + | ★CMemberVar001 プライベート mfpub_Print2関数 | ||
| + | ★CMemberVar001 プロテクト mfpub_Print2関数 | ||
| + | |||
| + | ★★★継承クラス内の関数呼び出し | ||
| + | CMemberVar001 プロテクト メンバ関数 | ||
| + | mpub_nValue= 1000,mpro_nValue= 1100,m_nValue= 2000 | ||
| + | |||
| + | CMemberVar001 mfpro_Print関数から呼び出し | ||
| + | ★CMemberVar001 プライベート mfpub_Print2関数 | ||
| + | ★CMemberVar001 パブリック mfpub_Print2関数 | ||
| + | |||
| + | ★★ここまで継承クラスの利用 | ||
| + | </syntaxhighlight> | ||