基本的matlab类方法

Sai*_*ait 4 matlab class

可能重复:
如何修改Matlab对象的属性

我正在尝试将我的C#代码转换为Matlab,在Matlab中我决定使用OOP(我没有和Matlab一起使用)能够处理我的C#代码的复杂性.

看一下教程,我想出了以下代码:

classdef Cat
    properties
        meowCount = 0; 
    end
    methods 
        function Meow(C)
            disp('meowww'); 
            C.meowCount = C.meowCount + 1;
        end
    end    
end
Run Code Online (Sandbox Code Playgroud)

结果:

>> c = Cat();
>> c.Meow();
meowww
>> c

c = 

  Cat

  Properties:
     meowCount: 0

  Methods
Run Code Online (Sandbox Code Playgroud)

所以,meowCount不要改变.问题是什么?

Rod*_*uis 7

我注意到的一些问题:

  • 你没有构造函数
  • 你不是从handle基类派生的

构造函数不是绝对必要的,但是当你真正想要开始开发更大的类时,它们非常有用.它用于初始化obj对象,该对象被传递给每个方法.它与Python self或C++ 非常相似this.

所以,你纠正的课程:

classdef Cat < handle

    properties
        meowCount = 0; 
    end

    methods 

        function obj = Cat()
            % all initializations, calls to base class, etc. here,
        end

        function Meow(obj)
            disp('meowww'); 
            obj.meowCount = obj.meowCount + 1;
        end
    end    
end
Run Code Online (Sandbox Code Playgroud)

示范:

>> C = Cat;
>> C.Meow; 
meowww
>> C.meowCount
1
Run Code Online (Sandbox Code Playgroud)

  • 不需要构造函数,OP可以使用`C`或`obj`,它只是一个命名约定.正如我在对OP的评论中提到的那样,缺乏继承是导致问题的原因.因为这是一个重复的问题,我们应该投票结束而不是回答. (2认同)