Matlab面向对象编程:设置和获取多个对象的属性

Gab*_*abe 7 oop matlab get class set

我有一个这样的课:

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
Run Code Online (Sandbox Code Playgroud)

我以单元格形式创建了我的Vehicle级对象(不要问我为什么 - 这是全局设置的外行解决方法):

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;
Run Code Online (Sandbox Code Playgroud)

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

谢谢加布里埃尔

Mik*_*ail 8

对于同一类的成员,您可以使用圆括号(常规数组):

Vehicles(1) = Vehicle(100);
Vehicles(2) = Vehicle(200);
Vehicles(3) = Vehicle(50);
Run Code Online (Sandbox Code Playgroud)

要设置所有对象,请使用deal:

[Vehicles(:).Is_Active] = deal( true );
Run Code Online (Sandbox Code Playgroud)

您也可以首先初始化一个对象数组.

对于您的问题(2)和(3),语法等同于MATLAB结构的语法:

speedArray = [Vehicles.Speed];
fasterThanX = Vehicles( speedArray > X );
Run Code Online (Sandbox Code Playgroud)

这种矢量化符号是MATLAB的一个优点,并被广泛使用.