Cpp クラス 継承 アップキャスト 新しいページはコチラ
提供: yonewiki
(→クラス 継承 アップキャスト) |
(→クラス 継承 アップキャスト) |
||
97行: | 97行: | ||
それで派生クラスは以下のようなものを作りました。まずは、オプション料金を一つだけ受け取るクラス。 | それで派生クラスは以下のようなものを作りました。まずは、オプション料金を一つだけ受け取るクラス。 | ||
− | <span style="color: #ffffff; background-color: #555555; padding: 0px 5px 0px 5px; display: inline-block;">cpp <span>(</span> | + | <span style="color: #ffffff; background-color: #555555; padding: 0px 5px 0px 5px; display: inline-block;">cpp <span>(</span>派生クラス DeriveInheritance.h<span>)</span><!-- padding 上 右 下 左--> |
<syntaxhighlight2 lang="cpp" line> | <syntaxhighlight2 lang="cpp" line> | ||
#ifndef __DERIVEINHERITANCE_H_YONET__ | #ifndef __DERIVEINHERITANCE_H_YONET__ | ||
161行: | 161行: | ||
Deriveは「派生する」という意味で、CDeriveInheritance(int iArgMoney, int iArgMonth, int iArgOption)は3つの引数を受け取って、基本料金、利用月を基底クラスに初期化リストでそのまま渡しています。そして派生クラスだけが扱う3つめのオプション料金をm_iDeriveOptionに格納しています。引数が2つのBaseクラスと基底クラスと同じ役割のコンストラクタCDeriveInheritance(int iArgMoney, int iArgMonth)があります。2つの引数をそのまま、基底クラスに初期化リストを渡しています。後から、オプション料金だけを指定できる関数CDeriveInheritance::mf_vDeriveSetOptionValueもあります。オプション料も含めた合計金額はmf_iDeriveSumMoneyで計算して返却され、mf_vDeriveDispValueで利用され、printfで合計金額を出力します。 | Deriveは「派生する」という意味で、CDeriveInheritance(int iArgMoney, int iArgMonth, int iArgOption)は3つの引数を受け取って、基本料金、利用月を基底クラスに初期化リストでそのまま渡しています。そして派生クラスだけが扱う3つめのオプション料金をm_iDeriveOptionに格納しています。引数が2つのBaseクラスと基底クラスと同じ役割のコンストラクタCDeriveInheritance(int iArgMoney, int iArgMonth)があります。2つの引数をそのまま、基底クラスに初期化リストを渡しています。後から、オプション料金だけを指定できる関数CDeriveInheritance::mf_vDeriveSetOptionValueもあります。オプション料も含めた合計金額はmf_iDeriveSumMoneyで計算して返却され、mf_vDeriveDispValueで利用され、printfで合計金額を出力します。 | ||
+ | |||
+ | |||
+ | 2つめの派生クラスはオプション金額を複数、配列によって受け取るものを作ります。以下のとおりです。 | ||
+ | |||
+ | <span style="color: #ffffff; background-color: #555555; padding: 0px 5px 0px 5px; display: inline-block;">cpp <span>(</span>派生クラス DeriveInheritance.h<span>)</span><!-- padding 上 右 下 左--> | ||
+ | <syntaxhighlight2 lang="cpp" line> | ||
+ | #ifndef __DERIVEARRINHERITANCE_H_YONET__ | ||
+ | #define __DERIVEARRINHERITANCE_H_YONET__ | ||
+ | #if _MSC_VER > 1000 | ||
+ | #pragma once | ||
+ | #endif | ||
+ | #include "BaseInheritance.h" | ||
+ | |||
+ | class CDeriveArrInheritance :public CBaseInheritance { | ||
+ | private: | ||
+ | int m_iDeriveOption = 0; | ||
+ | int m_iDeriveMoney = 0; | ||
+ | int m_iSize = 0; | ||
+ | int* m_piDeriveOptionArr = nullptr; | ||
+ | void mf_vDeriveSumMoney(); | ||
+ | public: | ||
+ | CDeriveArrInheritance(int iArgMoney, int iArgMonth); | ||
+ | CDeriveArrInheritance(int iArgMoney, int iArgMonth, int* piArgOption,int iSize); | ||
+ | ~CDeriveArrInheritance(); | ||
+ | void mf_vDeriveArrDispValue(); | ||
+ | |||
+ | void mf_vDeriveSetArrOption(int* piArgOption); | ||
+ | int mf_iDeriveGetArrOption(); | ||
+ | }; | ||
+ | #endif | ||
+ | </syntaxhighlight2> | ||
+ | |||
+ | <span style="color: #ffffff; background-color: #555555; padding: 0px 5px 0px 5px; display: inline-block;">cpp <span>(</span>派生クラス DeriveInheritance.cpp<span>)</span><!-- padding 上 右 下 左--> | ||
+ | <syntaxhighlight2 lang="cpp" line> | ||
+ | #include "pch.h" | ||
+ | #include "DeriveArrInheritance.h" | ||
+ | |||
+ | CDeriveArrInheritance::CDeriveArrInheritance(int iArgMoney, int iArgMonth) | ||
+ | :CBaseInheritance(iArgMoney, iArgMonth){ | ||
+ | printf("Constructor:CDriveArrInheritance(int,int)\n"); | ||
+ | |||
+ | } | ||
+ | |||
+ | CDeriveArrInheritance::CDeriveArrInheritance(int iArgMoney, int iArgMonth, int* piArgOption,int iArgSize) | ||
+ | :CBaseInheritance(iArgMoney, iArgMonth) { | ||
+ | printf("Constructer:CDeriveArrInheritance(int,int,int*,int)\n"); | ||
+ | |||
+ | m_iSize = iArgSize; | ||
+ | mf_vDeriveSetArrOption(piArgOption); | ||
+ | } | ||
+ | |||
+ | CDeriveArrInheritance::~CDeriveArrInheritance() { | ||
+ | printf("Destructer:~CDeriveArrInheritance()\n"); | ||
+ | delete[] m_piDeriveOptionArr; | ||
+ | } | ||
+ | |||
+ | |||
+ | int CDeriveArrInheritance::mf_iDeriveGetArrOption() { | ||
+ | return m_iDeriveOption; | ||
+ | } | ||
+ | |||
+ | void CDeriveArrInheritance::mf_vDeriveArrDispValue() { | ||
+ | int iSumMoney = mf_iDeriveGetArrOption() + mf_iBaseSumMoney(); | ||
+ | printf("DeriveMoney=%d\n", iSumMoney); | ||
+ | } | ||
+ | |||
+ | void CDeriveArrInheritance::mf_vDeriveSumMoney() { | ||
+ | for (int iScan = 0; iScan < m_iSize; iScan++) { | ||
+ | m_iDeriveOption += m_piDeriveOptionArr[iScan]; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void CDeriveArrInheritance::mf_vDeriveSetArrOption(int* piArgOption) { | ||
+ | m_piDeriveOptionArr = new int[m_iSize]; | ||
+ | for (int iScan = 0; iScan < m_iSize; iScan++) { | ||
+ | m_piDeriveOptionArr[iScan] = piArgOption[iScan]; | ||
+ | } | ||
+ | mf_vDeriveSumMoney(); | ||
+ | } | ||
+ | </syntaxhighlight2> | ||
+ | |||
+ | |||
[[C PlusPlus#C++からの技術|C++]]に戻る | [[C PlusPlus#C++からの技術|C++]]に戻る |