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

1.2.8 目标指针

在MQL5中,有可能动态地创造复杂形势的目标,被新操作执行,创造目标返回一个描述符号,描述符号占用8字节。根据语法来说,在MQL6中的描述符号目标中与C++程序类似。

示例:

MyObject* hobject= new MyObject();

相较于C++,上面示例的hobject变量并不是内存指针,而是一个对象描述符。 此外,MQL5中,必须通过引用传递函数参数的所有对象。下面是作为函数参数传递对象的示例:

class Foo 
{ 
public: 
string m_name; 
int m_id; 
static int s_counter; 
//--- 构造函数和析构函数 
Foo(void){Setup("noname");}; 
Foo(string name){Setup(name);}; 
~Foo(void){}; 
//--- 初始化 Foo类型对象 
void Setup(string name) 
{ 
m_name=name; 
s_counter++; 
m_id=s_counter; 
} 
}; 
int Foo::s_counter=0; 
//+------------------------------------------------------------------+ 
//| 脚本程序开始函数 | 
//+------------------------------------------------------------------+ 
void OnStart() 
{ 
//--- 声明一个自动创建的对象变量 
Foo foo1; 
//--- 引用传递对象变量 
PrintObject(foo1); 

//--- 声明对象指针,使用'new'操作符创建它 
Foo *foo2=new Foo("foo2"); 
//--- 引用传递对象指针的变量 
PrintObject(foo2); // 对象指针根据编译器自动转换 

//--- 声明Foo类型对象的数组 
Foo foo_objects[5]; 
//--- 传递对象数组变量 
PrintObjectsArray(foo_objects); // 传递对象数组的单独函数 

//--- 声明Foo类型对象的指针数组 
Foo *foo_pointers[5]; 
for(int i=0;i<5;i++) 
{ 
foo_pointers[i]=new Foo("foo_pointer"); 
} 
//--- 传递指针数组变量 
PrintPointersArray(foo_pointers); // 传递数组指针分隔函数 

//--- 终止前强制删除创建为指针的对象 
delete(foo2); 
//--- 删除指针数组 
int size=ArraySize(foo_pointers); 
for(int i=0;i<5;i++) 
delete(foo_pointers[i]); 
//--- 
} 
//+------------------------------------------------------------------+ 
//| 始终通过引用传递对象 | 
//+------------------------------------------------------------------+ 
void PrintObject(Foo &object) 
{ 
Print(__FUNCTION__,": ",object.m_id," Object name=",object.m_name); 
} 
//+------------------------------------------------------------------+ 
//| 传递对象数组 | 
//+------------------------------------------------------------------+ 
void PrintObjectsArray(Foo &objects[]) 
{ 
int size=ArraySize(objects); 
for(int i=0;i<size;i++) 
{ 
PrintObject(objects[i]); 
} 
} 
//+------------------------------------------------------------------+ 
//| 传递对象指针数组 | 
//+------------------------------------------------------------------+ 
void PrintPointersArray(Foo* &objects[]) 
{ 
int size=ArraySize(objects); 
for(int i=0;i<size;i++) 
{ 
PrintObject(objects[i]); 
} 
} 
//+------------------------------------------------------------------+
打赏
版权所有转载请注明标题及链接:峰汇在线 » 1.2.8 目标指针
上一篇:
下一篇:
分享到: 更多 (0)

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

支付宝扫一扫打赏

微信扫一扫打赏