gpt4 book ai didi

matlab - 在 Matlab 中实现抽象属性的问题

转载 作者:行者123 更新时间:2023-12-04 19:37:51 26 4
gpt4 key购买 nike

在 Matlab (2017b) 中,我正在尝试实现一个具有尚未定义的抽象属性的父类(super class)。

classdef Class_Test1
properties (Abstract=true)
obj
end
end

然后子类应该实现此属性并将其限制为某个类,例如:

classdef Class_Test2 < Class_Test1
properties
obj@double = 123;
end
end

a = Class_Test2; 现在抛出一个错误:

The property 'obj' restriction defined in class 'Class_Test2' must match
the property definition in base class 'Class_Test1'.

在抽象类的实现中没有办法指定 obj 的类/类型,还是我遗漏了什么?

最后我希望objClass_Test1中抽象来实现几个子类,这些子类将在obj中保存不同类的对象.

感谢任何帮助...

最佳答案

MATLAB 类很奇怪……或者在任何情况下都与您在任何其他编程语言中学习过的类所期望的类非常不同。

MATLAB 的一个方面是它是一种解释型语言。东西在执行时评估,而不是在编译时评估。所以代码并不总是需要有意义。

所以,我们可以这样解决您的问题:

classdef (Abstract) foo
methods
function c = getclass(in)
c = class(in.obj);
end
end
end

函数 foo.getclass 似乎没有意义,因为 foo 没有属性 obj。但是因为 foo 是抽象的,我们永远不会有类 foo 的对象,我们将在其上调用 getclass 方法。每当 getclass 被调用时,它将是一个派生类。所以,如果我们要使用这个getclass方法,我们需要确保派生类有一个属性obj:

classdef foo_uint8 < foo
properties
obj@uint8 = uint8(1);
end
end

现在可以调用 foo_uint8.getclass:

>> a = foo_uint8;
>> a.getclass
ans =
'uint8'

关于matlab - 在 Matlab 中实现抽象属性的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57403767/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com