我在使用matlab时遇到了一些问题我在用b样条有时我想使用实际的样条曲线,而其他时候我只想使用所谓的基函数在不深入研究b样条理论的情况下,实际的区别在于,当我想使用b样条时,我需要一个额外的方法和属性我希望通过在构造函数中传递该属性来初始化该属性。
到目前为止(去掉了大多数不相关的方法和属性),我希望大致演示一下我想要的行为:
bsplinespace.m:

classdef bsplinespace < handle
    properties
        p % polynomial degree
    end

    methods
        function result = bsplinespace(p)
            result.p = p;
        end
    end
end

bspline.m:英国标准:
classdef bspline < bsplinespace
    properties
        controlpoints
    end

    methods
        function result = bspline(p, controlpoints)
            result.controlpoints = controlpoints;
        end
        function result = getp(this)
            result = this.p;
        end
    end
end

但是,在这种情况下,bspline构造函数调用bsplinespace构造函数而不传递任何参数,从而导致其崩溃:
Not enough input arguments.

Error in bsplinespace (line 8)
            result.p = p;

Error in bspline (line 7)
        function result = bspline(p, controlpoints)

更明确地说,我想要的是:
一个类bsplinespace,它有一个接受一个参数p的构造函数
类bspline,它是相同的,但是有一个额外的属性和方法
有没有一种优雅的方法来实现这一点?

最佳答案

bspline的构造函数方法中,需要显式调用带有输入参数p的超类构造函数:

function result = bspline(p, controlpoints)
    result@bsplinespace(p)
    result.controlpoints = controlpoints;
end

否则,MATLAB将使用零输入参数调用超类构造函数,您将看到错误。
这是一个非常合理的设计,允许您控制如何将子类构造函数的参数传递给超类构造函数的详细信息(如果您想提供默认参数,则可以不提供)。

10-01 19:52