还是在用MALTAB完成一些OOP编程,遇到的问题N多。。。果然是比较郁闷的,其实笔者的要求并不多,主要是希望通过类来封装每一个节点属性,要不然相同变量太多了,不好用。搞了半天问题在于,在MATLAB的一个类里面,成员变量如何去访问成员函数,额。。。其他语言都没见过这样的问题。。。MATLAB搞得非常奇怪。
先放上一个解决方案,笔者形容是凑合着用的,通过静态函数绕了一下,想起来也是怪怪的,如下
类名是test,包含一个属性NUM,基本MALTAB的HELP里面相关OOP的文档大致我都翻了一下,的确没有发现有出现在methods里面自定义函数名的,大部分都是set和get。
这里叙述纯粹按照笔者猜想,首先我们实例化一个类
TEST=test(5); 这个部分直接就会调用构造函数,入参可以没有,这里为了初始化所以设定了一个val,出参必须要有,原因和之前的一样,类的内部的一个引用,或者说实例化,最后把这个引用传给TEST。
再下来实际上我们要解决如何在成员函数里面访问成员变量,首先是MATLAB文档里面多次提到的set和get,这两个是肯定可以使用的,但是set必须是两个入参,可以有出参,但是笔者存在报错就是了,get必须有出参,而且入参只有一个。且每一个函数的第一个入参都必须是Obj,即对象。如调用set.NUM函数的时候
并不是写成test.set.NUM()或者test.NUM(),而实际上调用的方法是test.NUM=xx;这样,实际上好像这里是一个重写,虽然我定义的test类没有继承,但是应该有继承有一个默认的最高类,默认中间test.NUM=XX执行就是一个单纯的成员变量赋值的作用,而我上面所定义的实际上是对这个赋值重写,可以自定义test.NUM=xx这个动作。如
function obj=set.NUM(obj,val)
obj.NUM=val;
fprintf('%d',val);
end
这样就会在test.NUM=XX赋值的同时,print一行值。get方法和set方法类似,以上好像是matlab帮助里面常写的,但是这里笔者想实现的是比较常见的,随便定义一个成员函数名,然后执行一个动作,而set和get的.之后跟的必定是属性名,而且参数受限,所以把属性名定义成方法名的凑的思路也走不通。
本来按照道理而言,如下写法
function obj=set_NUM(obj,val)
obj.NUM=val;
end
直接是可以的,虽然我们最后还是这样写,但是要写成静态化。非静态化的调用直接test.set_NUM(xx)一个参数就行,不需要传递obj,然后程序把对象传递进去,改变一个参数的值,再传出,笔者写的《MATLAB OOP记点东西1》那部分也就到这就以为测试通过了。但是如果你再次执行这个动作的时候会发现,再传参数给set_NUM的执行过程中,obj的值是上一次对象的值,而不是用set_NUM函数改动后的,但是用test.NUM=xx这样的改动之后的结果是可以的,所以问题还是归于传入的obj到底是哪里来的,当然这个问题也没有搞明白。不过最后为了完成目的,笔者发现,如果把之上的函数放入静态函数块里面就行了。
MATLAB的静态成员函数和其他的有点不同,貌似记得其他的好像是不用实例化对象就可以直接调用的,而MATLAB的静态成员函数还是要实例化的,在定义的时候如下
methods (Static)
function obj=set_NUM(obj,val)
obj.NUM=val;
end
end
变化不是很大,就加了一个static,但是在调用的时候不一样,如笔者实例化的对象为test,即调用是
test=test.set_NUM(test,10);实际上就是手动去完成一个Obj的传递工作,虽然比较凑乎,但是笔者的基本需求达到了就是了。在MATLAB帮助实例An Example of Syntax这个里面也类似采用了这样的一种框架,故貌似。。普通method只可以在构造或者set,get函数里面使用成员变量,而其他的方法都不行。
分享到:
相关推荐
Java 第一阶段建立编程思想 【零钱通(OOP)】---- 代码 Java 第一阶段建立编程思想 【零钱通(OOP)】---- 代码 Java 第一阶段建立编程思想 【零钱通(OOP)】---- 代码 Java 第一阶段建立编程思想 【零钱通(OOP)...
S2-------JavaOOP全程解答S2-------JavaOOP全程解答S2-------JavaOOP全程解答S2-------JavaOOP全程解答
python学习笔记,包含oop简介-使用 OOP 对森林火灾建模-对象
资源来自pypi官网。 资源全名:oop_ext-0.1.8-py2.py3-none-any.whl
Learning-Object-Oriented-Programming-Explore-and-crack-the-OOP-code-in-Python-JavaScript-and-C-.pdf
Java OOP阶段小测试1-笔试题
python库,解压后可用。 资源全名:oop_ext-0.1.8-py2.py3-none-any.whl
练习创建流在Java 8中,流是一种非常强大的新数据类型。 此仓库用于练习创建它们的多种方法。 打开文件然后按照注释中的说明进行操作。
OOP-2-M-19-41743-3:OOP 2项目公开19-41743-3
最后一节将深入讨论先进的战略,包括集装箱,静态变量和功能方面。 拥有超过20年的经验,制定和实施面向对象的软件,专家作者已经开发出了方便和全面的书,用MATLAB建立有效的面向对象的软件辅助读者。 === ...
【IT十八掌徐培成】Java基础第04天-02.OOP概念-定义类-创建对象.zip
SoftUni-OOP-考试-MassEffect-Java SoftUni-OOP-考试-MassEffect-Java
SoftUni-CSharp-OOP-01-2-Inheritance-Exercise
【IT十八掌徐培成】Java基础第05天-01.回顾OOP-构造函数.zip
matlab求导代码基于OOP的前向后向中心差异 以OOP样式/惯例编写的MATLAB代码,使用前/后/中心差公式近似于导数,并与实际导数进行比较,以得出误差/比率
javaoop的一个很适合初学者的文档,希望大家能够希望,不希望不要喷,javajavajava内部测试试题我擦你妹的你自己什么情况
java课程设计,Java学习资料/项目源码&教程