诚信为本
量力而为
当前位置:峰汇在线 > MQL语言 > MQL5编程参考文档 > 正文

1.2.4 架构和类以及界面

本文目录

架构

架构是设定任何类型的元素(除了 空型),因此,架构要组合不同类型的逻辑相关资料。

架构说明

以下描述定义结构类型数据:

struct structure_name
{
elements_description
};

架构名称不能用作标识符(变量或功能的名称),应该直接记录在MQL5架构元素中,没有定位,在C++中需要遵循以下指令来定义这些命令:

#pragma pack(1)

如果想在架构中执行另一定位,运用辅助程序,“fillers”填充正确大小。

示例:

struct trade_settings
{
uchar slippage; // 许可的下降值-1字节大小
char reserved1; // 跳过 1 字节
short reserved2; // 跳过 2 字节
int reserved4; // 跳过另4个字节。确保定位8字节界限
double take; // 固定利润价格值
double stop; // 受保护的止损价格值
};

线性构造的描述只对动态传输功能入口有效。

注意:该例子列举的是错误的设计数据,在双精度型数据中,首先声明take和stop的数据大小比较好,然后是slippage,在此情况下,数据的内部表达式与 #pragma pack() 无关,都是一样的。

如果该构造包含字符串型数据变量,和/或目标动态数组,编译器给架构分派隐含的构造函数。构造函数设置所有字符串型和初始化目标动态数组的所有结构。

简单构造

架构并不包括字符串或动态数组,这些被叫做简单构造;该构造的变量可以互相自由复制,不同结构也可以,简单结构的变量和数组,都能从DLL以参数的形式传递到输入功能 。

接入架构会员入口

架构是一种新的数据型用来声明这种类型变量的,只有在一个项目开始是架构可以运行,架构会员可以通过 操作点 (.)进入接口。

示例:

struct trade_settings
{
double take; // 利润固定价格值
double stop; // 受保护的止损价格值
uchar slippage; // 可接受的下降值
};
//--- 创建和初始化交易设置类型的变量
trade_settings my_set={0.0,0.0,5};
if (input_TP>0) my_set.take=input_TP;

修饰符 ‘final’

结构声明过程中使用’final’ 修饰符禁止从该结构进一步继承。如果结构无需进一步修改,或出于安全原因不允许修改,则以’final’修饰符声明该结构。此外,该结构的所有成员也将默认为不可更改。

struct settings final
{
//--- Structure body
};

struct trade_settings : public settings
{
//--- Structure body
};

 

如果您像上面示例一样试图以 ‘final’ 修饰符继承形成一个结构,编译器将返回一个错误:

不能像其被声明为’final’一样从’设置’继承
参照’设置’声明

类与架构的不同之处在于:
•在声明中使用关键字类;
•默认情况下,所有类成员都能通过独自通过指示符,除非另行表明的,架构里的数据成员都能通过默认类型,除非是另行标注的。
•甚至在类中没有虚函数的情况下,类目标总是有一个 虚函数 图表,结构类没有虚函数;
•新功能操作也能应用到类目标中,但不能应用到结构类中;
•类只能从类中 继承 ,结构也只能从架构中继承。

类和架构都有明确的构造函数和解构方法,如果构造函数定义明确,架构或类别变量的初始化进行初始化序列是不可能的。

示例:

struct trade_settings
{
double take; // 利润固定价格值
double stop; // 受保护的止损价格值
uchar slippage; // 可接受的下降值
//--- 构造函数
trade_settings() { take=0.0; stop=0.0; slippage=5; }
//--- 析构函数
~trade_settings() { Print("This is the end"); }
};
//--- 编译器生成一个无法初始化的错误信息
trade_settings my_set={0.0,0.0,5};
1 2 3 4 5
打赏
版权所有转载请注明标题及链接:峰汇在线 » 1.2.4 架构和类以及界面
上一篇:
下一篇:
分享到: 更多 (0)

如您觉得此文不错请扫码打赏!

支付宝扫一扫打赏

微信扫一扫打赏