退職したハードウェアエンジニアに敬意を表し、Matlab Object Orientedプログラミングについて学んでください。継承 - 基本クラス関数は派生クラスデータを割り当てることができますか?
私はバイナリツリークラスのために、ウォーク、プルーニング、追加、単純なバイナリツリーの配線のための特別な機能を多数備えています。私は自分のクラス(classdef btree3 <ハンドル)を約20個のメソッドで作成し、それらをテストしました。これまでのところうまく動作しています。
次へ私は、バイナリツリー(classdef EqTree < btree3)を継承するツリーを1回使用するための特定のクラスを作成しました。一般的に、これはすべてのbtree3方法はEqTreeオブジェクトから呼び出し可能であることで動作します:X3は、ノードのどれもさらに下では、それにEqTreeデータのプロパティを持っていながら、
X3 = EqTree;
X3.GenerateRandomTree(50,8);
X3.RenumberTree(100);
disp('Walking X3 tree');
X3.WalkTree;
私がいる問題があります彼らは持っている。すべての下位ノードはbtree3オブジェクトとして割り当てられていますが、デフォルトでは、すべてのbtree3メソッドがEqTreeオブジェクトに対して呼び出されているにもかかわらず行う方法を知っています。ここに示されている、それは完全だかのように、各オブジェクトが見えるものです:
>> Z1=btree3
Z1 =
btree3 with properties:
NodeNum: []
Prev: [0×0 btree3]
Left: [0×0 btree3]
Right: [0×0 btree3]
>> Z2=EqTree
Z2 =
EqTree with properties:
Operator: []
LeafData: []
NodeEq: []
NodeEqName: []
OutputType: []
NodeNum: []
Prev: [0×0 btree3]
Left: [0×0 btree3]
Right: [0×0 btree3]
>>
私の質問:また、派生クラスからのデータのプロパティを割り当てるために、ツリーのノードを割り当てbtree3内で継承されたメソッドを伝える方法はあります?例えば、上記の呼び出しで作成されたランダムなツリーに私はこれを参照してください。
X3を=
性質を持つEqTree:
Operator: []
LeafData: []
NodeEq: []
NodeEqName: []
OutputType: []
NodeNum: 100
Prev: [0×0 btree3]
Left: [1×1 btree3]
Right: [1×1 btree3]
X3.Left
ans =
特性を有するbtree3:二つの問題がある
NodeNum: 101
Prev: [1×1 EqTree]
Left: [0×0 btree3]
Right: [0×0 btree3]
:
EqTree日がツリーの下方に割り当てられていない1)、及び
2)ポインタはn o均等に長く、btree3から継承したメソッドは、ツリーを歩いてルートでEqTreeオブジェクトを見つけると失敗します。
必要な場合は、ツリーをbtree3オブジェクトとして割り当て、EqTreeデータ(EqTreeクラスが単独である場合)をデータに取り込むことができます。
質問が十分にはっきりしていることを願っていますが、必要に応じてさらにコードを投稿することができます。
ありがとうございます!
日時:EqTreeコンストラクタ:EqTreeが割り当てられますと、提供されている場合、btree3からNODENUMフィールドが設定されています
classdef EqTree < btree3
properties(SetAccess = private)
Operator % Logic, math or function
LeafData % Timetable or fixed values
NodeEq % Equation node represents
NodeEqName % Name that is used in higher equations
OutputType % Float, Integer, timetable, boolean, etc.
end
methods
function ThisNode = EqTree(NodeNum)
if (nargin > 0)
ThisNode.NodeNum = NodeNum;
end
end
日時:ノードを追加するためのbtree3クラスメソッド:
試してみて、余分されることをbtree3のGenerateRandomTreeメソッドは、btree3の他のメソッドを呼び出して実際に新しいメンバーをツリーに割り当てます。ツリーの左側に追加する場合、btree3はAddNodeLeftメソッドを呼び出します。このメソッドは、btree3クラスの一部であり、新しいbtree3オブジェクトの割り当てのみを認識します。これらはすべて継承され、EqTreeクラスによって呼び出されたときに機能しますが、新しいオブジェクトはBtree3オブジェクトであり、EqTreeオブジェクトではありません。私はここで、派生クラスのオブジェクトを割り当てる方法を理解するために願っています:
私の推測では、あなたがトンのための新たなコンストラクタメソッドを実装していないです彼はEqTreeクラスですか?もしあなたが持っていれば、それを投稿できますか? – gnovice
まあ、私は意図したが、多分それは正しく行われていない?私はこのコメントにコードを投稿することができないので、元の投稿に追加します。 – LGTrader
私はZ1 = EqTreeが動作しながら、Z2 = EqTree(100)は、それがbtree3オブジェクトが割り当てられているので、私は、EqTreeのNODENUM「読み取り専用プロパティを設定することはできません」が、私はおそらくこの方法を必要とする私に言っていないので、ことに注意してくださいんNodeNumを設定します。 – LGTrader