MATLAB 和 Octave 都具备面向对象的能力。然而,从技术上讲,它们并非完全的面向对象语言。

一种面向对象语言 (OOL) 包含三个组成部分:1. 多态性 2. 继承 3. 封装

Octave 可以通过添加新对象来扩展。这些对象可以重载运算符,例如赋值、切片、比较。

虽然在 MATLAB 中这可以通过 m 脚本完成,但在 Octave 中,新对象是以 C++ 类来实现的。一个关于如何在 Octave 中添加对象的简单示例可以在此处找到。

在 Octave 中定义和使用结构体(struct)

结构体(struct)是一种将不同类型的数据(称为“字段”)组合到一个单一对象中的数据结构。字段通过其名称访问。


声明结构体

可以通过为字段赋值来声明结构体,字段名与结构体名之间用句点 . 分隔:

>> city.name = 'Liege';
>> city.country = 'Belgium';
>> city.longitude = 50.6333;
>> city.latitude = 5.5666;

输入结构体的名称即可显示其所有字段及对应的值:

>> city
city =
{
  name = Liege
  country = Belgium
  longitude =  50.633
  latitude =  5.5666
}

结构体的操作

结构体可以像其他对象一样被复制:

>> city_copy = city;

使用句点操作符可以操作结构体的字段。
例如,可以通过以下方式修改字段值:

>> city.name = 'Outremeuse';

获取字段的值:

>> city.name
ans = Outremeuse

结构体相关函数

  • isstruct(obj):判断变量是否为结构体。

  • fieldnames(struct):返回结构体中所有字段名(以元胞数组形式):

>> fieldnames(city)
ans =
{
  [1,1] = name
  [2,1] = country
  [3,1] = longitude
  [4,1] = latitude
}
  • isfield(struct, 'fieldname'):检查结构体是否包含某个字段:

>> isfield(city, 'name')
ans = 1

访问和修改字段值的函数方式

  • 获取字段值:

>> getfield(city, 'name')
ans = Liege

>> city.('name')
ans = Liege
  • 设置字段值:

>> setfield(city, 'name', 'Outremeuse')

这些函数在字段名在程序运行时才确定的情况下特别有用。


删除结构体字段

可以使用 rmfield 函数删除结构体中的字段:

>> city = rmfield(city, 'name');

上述命令会删除 city 结构体中的 'name' 字段,并将结果重新赋值给 city

MATlab将方法(单独的M-file)存储在不在标准搜索路径上的类目录中。创建类所需要的两个最小的东西是构造函数和显示m文件。



Last modified: Wednesday, 16 April 2025, 11:35 AM