Cpp クラス 継承 デストラクタ 新しいページはコチラ
提供: yonewiki
(→クラス 継承 デストラクタ) |
|||
5行: | 5行: | ||
<tr> | <tr> | ||
<td style="width:1px;"></td> | <td style="width:1px;"></td> | ||
− | <td class="mbox-text plainlist" style="">本来の表記は「<b><span id="RealTitle" style="font-size:large;">C++ クラス 継承 デストラクタ</span></b>」です。この記事に付けられた題名は{{記事名の制約}}から不正確なものとなっています。</td> | + | <td class="mbox-text plainlist" style="">本来の表記は「<b><span id="RealTitle" style="font-size:large;">C++(Cpp) クラス 継承 デストラクタ</span></b>」です。この記事に付けられた題名は{{記事名の制約}}から不正確なものとなっています。</td> |
</tr> | </tr> | ||
</table> | </table> | ||
63行: | 63行: | ||
Constructor:CBaseInheritance(int,int) | Constructor:CBaseInheritance(int,int) | ||
Constructor:CDriveInheritance(int,int) | Constructor:CDriveInheritance(int,int) | ||
− | BaseMoney=34800 | + | BaseMoney=34800, total=35700 |
Constructor:CBaseInheritance(int,int) | Constructor:CBaseInheritance(int,int) | ||
Constructer:CDeriveArrInheritance(int,int,int*,int) | Constructer:CDeriveArrInheritance(int,int,int*,int) | ||
− | BaseMoney=34800 | + | BaseMoney=34800, total=36520 |
Constructor:CBaseInheritance(int,int) | Constructor:CBaseInheritance(int,int) | ||
Constructer:CDeriveDiscountInheritance(int,int,double) | Constructer:CDeriveDiscountInheritance(int,int,double) | ||
− | BaseMoney=46800 | + | BaseMoney=46800, total=23400 |
Destructer:~CDeriveDiscountInheritance() | Destructer:~CDeriveDiscountInheritance() | ||
Destructor:~CBaseInheritance() | Destructor:~CBaseInheritance() | ||
101行: | 101行: | ||
CBaseInheritance* pCBaseInheritanceUpcast; | CBaseInheritance* pCBaseInheritanceUpcast; | ||
pCBaseInheritanceUpcast = pCBaseInheritanceUpcastF(1); | pCBaseInheritanceUpcast = pCBaseInheritanceUpcastF(1); | ||
− | pCBaseInheritanceUpcast-> | + | pCBaseInheritanceUpcast->mf_vDispValue(); |
delete pCBaseInheritanceUpcast; | delete pCBaseInheritanceUpcast; | ||
pCBaseInheritanceUpcast = pCBaseInheritanceUpcastF(2); | pCBaseInheritanceUpcast = pCBaseInheritanceUpcastF(2); | ||
− | pCBaseInheritanceUpcast-> | + | pCBaseInheritanceUpcast->mf_vDispValue(); |
delete pCBaseInheritanceUpcast; | delete pCBaseInheritanceUpcast; | ||
pCBaseInheritanceUpcast = pCBaseInheritanceUpcastF(3); | pCBaseInheritanceUpcast = pCBaseInheritanceUpcastF(3); | ||
− | pCBaseInheritanceUpcast-> | + | pCBaseInheritanceUpcast->mf_vDispValue(); |
delete pCBaseInheritanceUpcast; | delete pCBaseInheritanceUpcast; | ||
123行: | 123行: | ||
Constructor:CBaseInheritance(int,int) | Constructor:CBaseInheritance(int,int) | ||
Constructor:CDriveInheritance(int,int) | Constructor:CDriveInheritance(int,int) | ||
− | BaseMoney=34800 | + | BaseMoney=34800, total=35700 |
Destructer:~CDeriveInheritance() | Destructer:~CDeriveInheritance() | ||
Destructor:~CBaseInheritance() | Destructor:~CBaseInheritance() | ||
Constructor:CBaseInheritance(int,int) | Constructor:CBaseInheritance(int,int) | ||
Constructer:CDeriveArrInheritance(int,int,int*,int) | Constructer:CDeriveArrInheritance(int,int,int*,int) | ||
− | BaseMoney=34800 | + | BaseMoney=34800, total=36520 |
Destructer:~CDeriveArrInheritance() | Destructer:~CDeriveArrInheritance() | ||
Destructor:~CBaseInheritance() | Destructor:~CBaseInheritance() | ||
Constructor:CBaseInheritance(int,int) | Constructor:CBaseInheritance(int,int) | ||
Constructer:CDeriveDiscountInheritance(int,int,double) | Constructer:CDeriveDiscountInheritance(int,int,double) | ||
− | BaseMoney=46800 | + | BaseMoney=46800, total=23400 |
Destructer:~CDeriveDiscountInheritance() | Destructer:~CDeriveDiscountInheritance() | ||
Destructor:~CBaseInheritance() | Destructor:~CBaseInheritance() | ||
</syntaxhighlight2> | </syntaxhighlight2> | ||
− | という感じで、きちんとそれぞれの派生クラスのデストラクタが動くようになります。よくクラスのデストラクタにはvirtualを付けとけ、というようなことを言う、なんでもvirtual ~ | + | という感じで、きちんとそれぞれの派生クラスのデストラクタが動くようになります。よくクラスのデストラクタにはvirtualを付けとけ、というようなことを言う、なんでもvirtual ~xxxデストラクタ主義を唱える人がいますが、自分はアップキャストで使うクラスだけに付ければよいと思います。そんなアップキャストするかどうかも意識していない基底クラスを利用すれば、デストラクタがどこではたらくかを意識していないということになるので、雑なプログラムになってしまいます。ちゃんと管理した方が良いと思います。設計図でしっかりと管理してほしいな。なんでもvirtualでもいいですけど。不要なデストラクタが省略できなくなるよ。 |