Cpp クラス 抽象クラスのソースを表示
新しいページはコチラ
移動:
案内
,
検索
[[C PlusPlus#C++からの技術|C++]]に戻る <table class="mbox-small" style="border:1px solid #aaa; background-color:#f9f9f9; width:22em;" id="RealTitleBanner"> <tr> <td style="width:1px;"></td> <td class="mbox-text plainlist" style="">本来の表記は「<b><span id="RealTitle" style="font-size:large;">C++ クラス 抽象クラス</span></b>」です。この記事に付けられた題名は{{記事名の制約}}から不正確なものとなっています。</td> </tr> </table> ※このページでは[[C PlusPlus|C++]]にのみ存在する機能として、記事タイトルが<nowiki>C++ クラス 抽象クラス</nowiki>になっています。<br /> <br /> == '''クラス 抽象クラス''' == 抽象クラスは、単体ではもう機能しないような基底クラスになってしまう手法で、先の記事で説明した仮想関数を使う時に基底クラスにはプログラムの実体を持たない方法です。[[Cpp クラス 継承 仮想関数]]で使っていたプログラムでは基底クラスは2箇所をvirtualキーワードで仮想関数にしていましたが、そのうちのmfVirtual_vDispValue()に変更して、基底クラスだったCBaseInheritanceを抽象クラスにしたいと思います。 まずは元々の基底クラスはこうだったという例を示します。 <span style="color: #ffffff; background-color: #555555; padding: 0px 5px 0px 5px; display: inline-block;">cpp <span>(</span>基底クラス BaseInheritance.h<span>)</span><!-- padding 上 右 下 左--> <syntaxhighlight2 lang="cpp" line start=1> #ifndef __BASEINHERITANCE_H_YONET__ #define __BASEINHERITANCE_H_YONET__ #if _MSC_VER > 1000 #pragma once #endif class CBaseInheritance { protected: int m_iBaseMoney = 0; int m_iBaseMonth = 0; int m_iMoney = 0; int mf_iBaseSumMoney(); public: CBaseInheritance(); CBaseInheritance(int iArgBaseMoney, int iArgBaseMonth); virtual ~CBaseInheritance(); virtual void mfVirtual_vDispValue(); void mf_vBaseDispValue(); }; #endif </syntaxhighlight2> 基底クラスの仮想関数がありましたが、基本料金が0円だったかも、必ず知りたいとしたら、このクラスがそのまま使われるとまずいという考え方もできます。ならば、基本料金を返却表示してしまう部分は派生クラスでプログラムされて、かつ基底クラスではプログラムを持たない形式にすると良いと考えることが出来ます。こういった、基底クラスの関数が派生クラスに全投げする状態の関数を純粋仮想関数と言います。 純粋仮想関数として定義するのも仮想関数がvirtualというキーワードを付けるだけだったの同様に簡単で、仮想関数を0で初期化することで、宣言だけで、プログラムを持つ必要がなくなります。具体的には以下のようになります。 <span style="color: #ffffff; background-color: #555555; padding: 0px 5px 0px 5px; display: inline-block;">cpp <span>(</span>基底クラス BaseInheritance.h<span>)</span><!-- padding 上 右 下 左--> <syntaxhighlight2 lang="cpp" line start=101> #ifndef __BASEINHERITANCE_H_YONET__ #define __BASEINHERITANCE_H_YONET__ #if _MSC_VER > 1000 #pragma once #endif class CBaseInheritance { protected: int m_iBaseMoney = 0; int m_iBaseMonth = 0; int m_iMoney = 0; int mf_iBaseSumMoney(); void mf_vBaseDispValue(); public: CBaseInheritance(); CBaseInheritance(int iArgBaseMoney, int iArgBaseMonth); virtual ~CBaseInheritance(); virtual void mfVirtual_vDispValue() = 0; }; #endif </syntaxhighlight2> と [[C PlusPlus#C++からの技術|C++]]に戻る
テンプレート:記事名の制約
(
ソースを閲覧
)
Cpp クラス 抽象クラス
に戻る。
個人用ツール
3.139.234.41
このIPアドレスのトーク
ログイン
名前空間
ページ
議論
変種
表示
閲覧
ソースを表示
履歴表示
操作
検索
案内
メインページ
コミュニティ・ポータル
最近の出来事
最近の更新
おまかせ表示
ヘルプ
ツールボックス
リンク元
関連ページの更新状況
特別ページ