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> |