2017-01-10 7 views
2

MATLABには、ある種のuse-interface-classなどを構築する方法がありますが、それは独自のオブジェクトを出力しませんか? class_mainから継承class_A/class_B/class_CオブジェクトなしのMATLABコンストラクタ/インターフェイスクラス

object1_from_class_main = constructor_class_A() 
object2_from_class_main = constructor_class_B() 
object3_from_class_main = constructor_class_C() 

:私は心の中でこのようなものを持っています。つまり、すべてのユーザー入力を処理するmain_classが存在する必要があり、このクラスの内部では、他のすべてのサブクラスが構築/維持されます。

大きな間違いがあるかどうかは分かりませんが、ご意見があれば感謝します。デザインによって

+0

なぜクラスを作成するだけで機能を使用しないのですか?また、なぜあなたがこれをしたいのかという現実的な例を私たちに与えてください。 – Suever

+0

私はベースクラスのようなものが必要です。これは、すべてのオブジェクトを繰り返し処理することができ、ハンドルなどを保存することができます。これが、このベース/メインクラスをユーザーのインターフェースとして使用する理由です。 – Lemonbonbon

+0

私の[前の回答]で提案された方法で何が問題になったのですか?(0120-385671/classes-containing-other-classes-as-properties) – Suever

答えて

4

、コンストラクタはまたはthe output should be unassignedに属しているクラスのオブジェクトを返す必要があり、コンストラクタという異なるクラスのオブジェクトを返すことはできません。 the documentationから。

コンストラクタからの出力引数は、構築されたオブジェクトのみです。出力引数を割り当てたくない場合は、コンストラクタ内のオブジェクト変数をクリアすることができます。

あなたはクラスMain

classdef ClassA < handle 
    methods (Static) 
     function mainobj = create_main() 
      % Construct Main object and do whatever you need to here 
      mainobj = Main(); 
     end 
    end 
end 

class_of_main = ClassA.create_main(); 

代わりのオブジェクトを返しますclassAための静的メソッド、classBを、など定義することができ、あなたのMainインスタンスあなたのクラス

の性質作ることができます
classdef ClassA < handle 

    properties 
     mainobj 
    end 

    methods 
     function self = ClassA() 
      self.mainobj = Main() 
     end 
    end 
end 

さらに良い質問ですが、これを行う必要があります。あなたの明確化に基づいて

更新

、あなたは基本的に、あなたが作成Furnitureオブジェクトのすべてを追跡するためのコントローラをしたいです。 Furnitureオブジェクトを追跡するクラスでこれを行うことができます

classdef FurnitureController < handle 
    properties 
     furnitures = furniture.empty() 
    end 

    methods 
     function addFurniture(self, furniture) 
      self.furnitures = [self.furnitures, furniture]; 
     end 
    end 
end 

classdef Furniture < handle 
end 

classdef Chair < Furniture 
end 

classdef Desk < Furniture 
end 

controller = FurnitureController() 
controller.addFurniture(Desk()) 
controller.addFurniture(Chair()) 
+0

さて、私は説明しようとしますなぜ私はこれをやろうとしているのですか?ユーザは 'chair'、' table'、 'cupboard'のような異なるオブジェクトを生成できるはずですが、これらのオブジェクトはすべてスーパークラスの' furniture'に属しています。ユーザが 'red_chair = chair()'コマンドを使用すると、クラス 'chair'のオブジェクトを生成するのではなく、すべての子オブジェクトに対して異なる機能を扱うスーパークラス' furniture'のオブジェクトを生成したいと思います。 – Lemonbonbon

+6

@Lemonbonbonもしユーザが 'chair'を作成すると、' chair 'は 'furniture'ではないでしょう。 'ガールフレンド'か 'ボーイフレンド'を求めて、あなたに一般的な '人物 'オブジェクトを与えたら、あなたはかなり気になるでしょうか?あなたはスーパークラスを全く見たことがありますか? – Suever

+3

@Suever誰でもmeeeeeeを見つけることができます。 – ballBreaker

関連する問題