诚信为本
量力而为
当前位置:ea编程网 EA知识 正文

MQL4编程中动态创建复杂类型对象及其指针的应用

在MQL4编程中,我们可以动态地创建复杂类型的对象。这是通过new操作符完成的,它返回创建的对象的描述符。描述符占用8字节的空间。在语法上,MQL4中的对象描述符类似于C++中的指针。

示例:

MyObject* hobject= new MyObject();

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

class MyClass
{
public:
    string m_name;
    int m_id;
    static int s_counter;

    MyClass(void){Setup("noname");};
    MyClass(string name){Setup(name);};
    ~MyClass(void){};

    void Setup(string name)
    {
        m_name=name;
        s_counter++;
        m_id=s_counter;
    }
};
int MyClass::s_counter=0;

void OnStart()
{
    MyClass class1;
    PrintObject(class1);

    MyClass *class2=new MyClass("class2");
    PrintObject(class2);

    MyClass class_objects[5];
    PrintObjectsArray(class_objects);

    MyClass *class_pointers[5];
    for(int i=0;i<5;i++)
    {
        class_pointers[i]=new MyClass("class_pointer");
    }
    PrintPointersArray(class_pointers);

    delete(class2);
    int size=ArraySize(class_pointers);
    for(int i=0;i<5;i++)
        delete(class_pointers[i]);
}

void PrintObject(MyClass &object)
{
    Print(__FUNCTION__,": ",object.m_id," Object name=",object.m_name);
}

void PrintObjectsArray(MyClass &objects[])
{
    int size=ArraySize(objects);
    for(int i=0;i<size;i++)
    {
        PrintObject(objects[i]);
    }
}

void PrintPointersArray(MyClass* &objects[])
{
    int size=ArraySize(objects);
    for(int i=0;i<size;i++)
    {
        PrintObject(objects[i]);
    }
}

在这个例子中,我们首先创建了一个名为MyClass的类,并定义了类的构造函数、析构函数和成员函数。然后我们在OnStart函数中创建了多种不同类型的MyClass对象,包括单个对象、对象数组和对象指针数组,并通过PrintObject、PrintObjectsArray和PrintPointersArray函数打印了这些对象的信息。最后,我们删除了通过new操作符创建的对象,以防止内存泄漏。

未经允许不得转载:ea编程网 » MQL4编程中动态创建复杂类型对象及其指针的应用