Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


18441 / 76732 ←次へ | 前へ→

【63733】VBAにおけるクラスの擬似承継
質問  みそじのおじさん  - 09/12/4(金) 18:13 -

引用なし
パスワード
   毎度お世話になっております。

現在VBAにおけるクラスの擬似承継について勉強をしております。

私は普段、ゲームのたぐいはほとんどしないのですが、たとえがわかり易く
なると思いドラクエにでてきそうな敵のクラスを作成してみました。

標準モジュール
Option Explicit

Sub Main()

  Dim Enemy As clsChird
  '子クラスのインスタンスの作成
  Set Enemy = New clsChird
 
  '自分の体力を回復する魔法を使用
  Enemy.MAGIC
 
  '体力を表示
  Debug.Print "Enemy HP =" & Enemy.HP

  '相手にあたえるダメージを表示 
  Debug.Print "Enemy Attack =" & Enemy.ATTACK
 
  Set Enemy = Nothing

End Sub

クラスモジュール1

Option Explicit

'////////////////////////////////////////////////////////
'クラス名 clsParent (親クラス)
'説明   敵のクラス
'特徴   攻撃はできないが、自分の体力を回復する魔法を
'     使う事ができる。
'////////////////////////////////////////////////////////

Private mMP As Long 'マジックポイント
Private mHP As Long '体力

Private Sub Class_Initialize()
  mHP = 20 '体力を20に設定
  mMP = 10 'マジックポイントを20に設定
End Sub

Property Get HP() As Long
  HP = mHP
End Property

Property Get MP() As Long
  MP = mMP
End Property
'自身の体力を+5回復する
Public Sub MAGIC()
  mHP = mHP + 5
End Sub

クラスモジュール2
Option Explicit
'////////////////////////////////////////////////////////
'クラス名 clsChird (子クラス)
'説明   敵のクラス
'特徴   親クラスの特徴を承継して、さらに子クラス独自の
     メソッド、プロパティを実装する。
     このクラスでは親クラスと同じ魔法が使用できて
     さらに相手を攻撃する事ができる。
     HP,MPは親クラスと同じ
'////////////////////////////////////////////////////////
Private mParent As clsParent
Private mMP As Long
Private mHP As Long

Private Sub Class_Initialize()
 '子クラス内に親クラスのインスタンスの作成
 Set mParent = New clsParent
End Sub

Private Sub Class_Terminate()
 Set mParent = Nothing
End Sub

Property Get MP() As Long
  '親クラスのプロパティ呼び出し
  mMP = mPaprent.MP
  MP = mMP
End Property

Property Get HP() As Long
  '親クラスのプロパティ呼び出し
  mHP = mParent.HP
  HP = mHP
End Property

Public Sub MAGIC()
  '親クラスのメソッド呼び出し
  mParent.MAGIC
End Sub

'相手に与えるダメージ量をランダム値で返す。
Public Function ATTACK() As Integer
 
 Randomize
 
  ATTACK = CInt((10 - 1) * Rnd + 1)
 
End Function


1 擬似的にクラスを承継したいが為に、
 子クラス内に使用したい親クラスのメソッド、プロパティを
 全て書いていますが、他の実現方法がありますでしょうか?
 (現状ですと、親クラスに変更、追加があった場合に関係する
  全ての子クラスを修正しなければいけません。)

2 最近私は、Scripting.Dictionaryの主要な機能をラッパーして
 さらに独自の機能を追加したクラスを作成しました。
 
 付けた機能は、
 myDic.Sort "ASC" myDic.Sort "DESC" などと書き
 keyを昇順、降順にSortしたり(Itemも)
 (keyが数値という制限がありますが)

 myDic.KeyValue(Index)みたく書き、Keyの配列内でのインデック
 ス値でKeyの値を参照するプロパティを付けたりしてみました。
 
 CreateObjectを使用するとインテリジェンス機能が使えなくなる
 というのもあり、一度クラスを作成してしまえば、使いまわしが
 よく自分の中では大変重宝しております。
 
 みなさまがお使いの「これは一度作れば非常に便利!!」という
 クラスを教えて頂けないでしょうか?(ソース抜きだと非常に
 ありがたいです。自分への作成課題にしたいので)

勉強の為にやっておりますので、まったく急いでおりません。
1または2の質問だけでもかまいませんので
お時間のある時にでもよろしくお願い致します。

0 hits

【63733】VBAにおけるクラスの擬似承継 みそじのおじさん 09/12/4(金) 18:13 質問
【63734】1だけ YU-TANG 09/12/5(土) 20:30 回答
【63738】Re:1だけ みそじのおじさん 09/12/6(日) 13:30 お礼

18441 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free