我创建了一个类,它对于所有的实际目的(尽管它比它看起来更复杂)可以被认为是一个matlab实数。在matlab中为一个类重载每个函数操作符
在课堂上,我可以重载大量MATLAB运营商,如加,MPOWER等..
这也许是不可能的,但我将如何去我的重载类的任何功能? 换句话说,假定我有一个任意函数f,它取实数并输出实数,并且说X是我的类的一个实例。我希望f(X)能够被matlab正确解释(当然,我有一种自然的方式来接受一个函数指针并将其应用到我的类中,我将在代码中使用这个方法)。
问题,因为我可以看到他们:matlab可能无法看到函数f需要实数作为输入。但我会留给用户不要搞乱他们的函数调用。
我有什么意义吗?
我不认为这是可能的,但如果是的话,这将是非常棒的。
PS:我知道我可以围绕它可能会获得通过创建需要一个功能可按句柄作为输入的方法,但它不太漂亮..
谢谢!
编辑:
对不起,我意识到这有点混乱。我会更清楚。假设我有一个表示随机,实际变量的类(为简单起见,表示离散集)。我的课程包含随机变量的概率分布及其可能的值。对于任意两个随机变量X,Y,总和X + Y是明确定义的,所以如果我有表示随机变量的实例X和Y,那么如果Z = X + Y定义了一个新的随机变量等于X和Y的总和,具有适当的设置和分布。我已经做到了,通过重载加号运算符。这真好。
假设我有一个任意函数f,比如说“cos”。那么,对于任何随机变量X,cos(X)也是一个随机变量,如果我可以只写Z = cos(X),它会自动创建我的类的实例,计算适当的域并且概率分布。
问题是,我希望这个自动操作发生在任何函数f - 我不想手动重载每个常用函数(尤其是因为我想让该函数与用户定义的函数f一起工作)。
举一个例子: 我创建了一个随机变量X,带有域[-2,-1,0,1,2]和概率[1/5,1/5,1/5,1/5, 1/5
我创建(怪异)函数f,使得 F(X)= X如果x = -2或2 F(X)= X^2否则
然后,通过设置Z = f(X),我希望matlab自动创建一个带有域{-2,0,1,2} 和概率[1/5,1/5,2/5,1/5]
数学上,我知道如何做到这一点。但是我需要拦截并重载我的课程的任何函数调用。
这是否有任何意义?
ps:我没有正式接受面向对象编程的培训,所以我有时候可能会使用错误的词作为概念。
再次感谢您的帮助!
我不太确定你试图你能提供一个想要的行为的例子吗? 您是否正在尝试创建'f(double d)'和'f(int i)',这就是我读取它的方式? – Juhl 2011-03-27 20:39:57
对不起,我不是很清楚。我添加了一些说明 – Cyrano 2011-03-27 21:27:17