基本的matlab类方法[重复]

Posted

技术标签:

【中文标题】基本的matlab类方法[重复]【英文标题】:Basic matlab class method [duplicate] 【发布时间】:2012-08-23 11:48:52 【问题描述】:

可能重复:How to modify properties of a Matlab Object

我正在尝试将我的 C# 代码转换为 Matlab,在 Matlab 中我决定使用 OOP,我没有在 Matlab 中使用过,以便能够处理我的 C# 代码的复杂性。

查看tutorial,我想出了以下代码:

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

结果:

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

c = 

  Cat

  Properties:
     meowCount: 0

  Methods

所以,meowCount 不会改变。有什么问题?

【问题讨论】:

如果您希望能够像在示例代码中尝试那样更新Cat.meowCount,则必须从handle 继承。 @Chris,是的。你的两个cmet都是真的。这是同一个问题的重复,对不起。它在使用handle 后工作。谢谢。 【参考方案1】:

我注意到的几个问题:

你没有构造函数 您不是从 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

演示:

>> C = Cat;
>> C.Meow; 
meowww
>> C.meowCount
1

【讨论】:

不需要构造函数,OP可以使用Cobj,这只是一个命名约定。正如我在对 OP 的评论中提到的那样,缺乏继承是问题的原因。因为这是一个重复的问题,我们应该投票结束而不是回答。 @Chris,我删除我的问题而不是投票给答案是不是更好?谢谢。 @Chris 什么时候命名约定变成了“just”命名约定?如果每个人都使用相同的名称来表示相同的事物(因此称为“约定”),那将是非常富有成效的。此外,构造函数虽然不是必要的,但在以后肯定会有用。但你当然是对的——这是一个骗局,应该被删除。 将来如果您发现您发布了重复的内容,最好这样做。但是,您现在将无法让您的问题得到一个赞成的答案(我认为)。如果您稍等片刻,这个问题可能会获得足够的票数,因此您无需做任何事情。阅读this meta post 以讨论删除重复项。 @RodyOldenhuis 对不起,如果我有点简洁。当然,最好每个人都遵循相同的约定。我只是觉得,由于 OP 问题的解决方案是继承自 handle,因此这应该是您回答的重点。其他点应作为惯例提及并推荐。但是,目前您的回答似乎表明这些将通过某种方式解决 OP 遇到的问题,而他们没有。

以上是关于基本的matlab类方法[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Matlab类基础知识

MATLAB数据分析方法的基本信息

Matlab 的 crossval 方法是不是尊重类频率?

Matlab 类方法:参数太多

重载时如何强制matlab调用常规函数而不是类方法?

MATLAB教程案例43~50总结MATLAB三维重建类算法仿真经验和技巧总结