Cpp クラス 継承 アップキャスト 新しいページはコチラ

提供: yonewiki
移動: 案内, 検索
(クラス 継承 アップキャスト)
(クラス 継承 アップキャスト)
97行: 97行:
 
 それで派生クラスは以下のようなものを作りました。まずは、オプション料金を一つだけ受け取るクラス。
 
 それで派生クラスは以下のようなものを作りました。まずは、オプション料金を一つだけ受け取るクラス。
  
<span style="color: #ffffff; background-color: #555555; padding: 0px 5px 0px 5px; display: inline-block;">cpp <span>(</span>基底クラス BaseInheritance.h<span>)</span><!-- padding 上 右 下 左-->
+
<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++]]に戻る

2020年7月23日 (木) 00:00時点における版



個人用ツール
名前空間

変種
操作
案内
ツールボックス