在另一个类 MATLAB 中创建一个类的对象数组

Posted

技术标签:

【中文标题】在另一个类 MATLAB 中创建一个类的对象数组【英文标题】:create array of objects of a class in another class MATLAB 【发布时间】:2013-04-20 20:06:10 【问题描述】:

我正在尝试在另一个类 Systemin MATLAB. The classCell 中创建一个类 Cell 的对象数组:

classdef Cell
 properties
    ID;
    EntityID;
    ZoneID;
    NeighborID; 
    State;
    nextChangeTime;
 end

 methods
 % Define the constructor
    function obj = Cell()
        obj.ID = zeros(1);
        obj.EntityID = zeros(1);
        obj.ZoneID = zeros(1);
        obj.NeighborID = zeros(1); 
        obj.State = zeros(1);
        obj.nextChangeTime = zeros(1);
    end
 end

现在我有另一堂课System。我尝试制作一个 Cell 对象数组,如下所示:

classdef System
  properties
    Cells;
  end

  methods
    function obj = System(dimx,dimy)
      obj.Cells(dimx,dimy) = Cell();
    end
  end

但我认为我使用了错误的格式。不确定这是否可能。任何有关如何实现此目的的建议将不胜感激。

【问题讨论】:

【参考方案1】:

为了能够创建用户定义类的对象数组(例如Cell类),为用户定义类提供默认构造函数很方便。默认构造函数是不带参数的构造函数(即当nargin==0 时)。创建数组时,数组对象的隐式初始化由这个构造函数完成。如果缺少此构造函数,尝试通过“扩展”标量对象来构建数组将产生错误。

另一种创建对象数组(不定义默认构造函数)的方法是使用horzcatvertcatcat

Aaaaand...访问对象的属性时,不要忘记提及您正在访问的对象:

obj.Cells = Cell.empty(0,0);  % Force the type of empty Cells to Cell class
obj.Cells(dimx,dimy) = Cell();

【讨论】:

所以我定义了 Cell 的默认构造函数。但是当我尝试执行语句 obj.Cells(dimx,dimy) = Cell(); 时,它说从 Cell 转换为 double 是不可能的。 我调整了代码,请再次查看我的帖子。显然,空属性的默认类型是 double。我们需要将其更改为 Cell。

以上是关于在另一个类 MATLAB 中创建一个类的对象数组的主要内容,如果未能解决你的问题,请参考以下文章

C#winform中为啥一个窗体的对象可以调用在另一个窗体中创建的一个类未实例化下

在 C++ 中的类中创建类对象的动态数组

如何调用在另一个函数中创建的对象

在层次结构中创建类的指针数组

在一个函数中创建一个数组并在另一个函数中读取它,而不需要返回语句

在另一个类中创建类实例的问题