2011-04-24 57 views
7

我有一个类,像这样:Matlab的面向对象编程:对多个对象设置和获取属性

classdef Vehicle < handle 
    %Vehicle 
    % Vehicle superclass 

    properties 
     Is_Active % Does the vehicle exist in the simualtion world? 
     Speed  % [Km/Hour] 
    end 

    methods 
     function this = Vehicle(varargin) 
      this.Speed = varargin{1}; % The speed of the car 
      this.Is_Active = true; 
     end 
    end 
end 

我以细胞的形态创建我的汽车类对象(不要问我为什么 - 这是一个外行对全局设置解决方法):

Vehicles{1} = Vehicle(100); 
Vehicles{2} = Vehicle(200); 
Vehicles{3} = Vehicle(50); 
Vehicles{1}.Is_Active = true; 
Vehicles{2}.Is_Active = true; 
Vehicles{3}.Is_Active = true; 

我的问题:1。 有没有办法将所有三个对象活跃在一个命令? 2.有没有办法在一个命令中获得所有三个对象的速度? 3.有没有办法在一个命令中查询哪些车辆比X快?

感谢 加布里埃尔

回答

8

对于同一类的成员,你可以使用圆括号(规则排列):

Vehicles(1) = Vehicle(100); 
Vehicles(2) = Vehicle(200); 
Vehicles(3) = Vehicle(50); 

要设置所有对象使用deal

[Vehicles(:).Is_Active] = deal(true); 

你也可能是initialize an array of objects

对于您的问题(2)和(3)的语法等效于那些MATLAB结构:

speedArray = [Vehicles.Speed]; 
fasterThanX = Vehicles(speedArray > X); 

这种矢量表示法是一种strong point of MATLAB并被广泛使用。