11 березня 2016 р.

С++, повернення внутрішньою масиву з класу


Тестування, яке нотаток. С++, Qt5.

#include <QCoreApplication>
#include <QDebug>

class class1{

public:
    class1(){
        qDebug("=== constructor class1");
        m_w=10;
        qDebug()<<"class1::array size"<<m_w;
        m_a= new uchar[m_w];
        m_a[0]='Z';
    }

    void getArray(int &w, uchar *&a)
    {
        qDebug("=== getArray");
        w=m_w;
        a=m_a;
    }

    uchar *getArrayRet(int &w){
        qDebug("=== getArrayRet");
        w=m_w;
        return m_a;
    }

    void eraseArray()
    {
        qDebug("=== eraseArray");
        delete[]m_a;
        m_a=nullptr;
        qDebug()<<"eraseArray m_a"<<m_a;
    }

    void printArray()
    {
        qDebug("=== printArray inside");
        if (m_a) qDebug()<<"class1::getArray2"<<m_a<<*m_a<<(char)m_a[0];
    }

private:
    uchar *m_a;
    int m_w;

};


int main(int argc, char *argv[])
{
    uchar *array=nullptr;
    int sizearray=0;
    class1 *c1=new class1();
    c1->getArray(sizearray,array);
    qDebug()<<"Array ptr ret"<<array<<sizearray;
    if (array) qDebug()<<"array[0]"<<array[0];

    c1->printArray();
    c1->eraseArray();

    array=c1->getArrayRet(sizearray);
    qDebug()<<"Array ptr getArrayReturn"<<array<<sizearray;
    if (array) qDebug()<<"array[0]"<<array[0];


    c1->getArray(sizearray,array);
    qDebug()<<"Array ptr getArray"<<array<<sizearray;
    if (array) qDebug()<<"array[0]"<<array[0];

    QCoreApplication a(argc, argv);
    return a.exec();
}

Результат:

=== constructor class1
class1::array size 10
=== getArray
Array ptr ret 0x262fc6a1dc0 10
array[0] 90
=== printArray inside
class1::getArray2 0x262fc6a1dc0 90 Z
=== eraseArray
eraseArray m_a 0x0
=== getArrayRet
Array ptr getArrayReturn 0x0 10
=== getArray
Array ptr getArray 0x0 10

Немає коментарів:


Коли забув ти рідну мову, біднієш духом ти щодня...
When you forgot your native language you would become a poor at spirit every day ...

Д.Білоус / D.Bilous
Рабів до раю не пускають. Будь вільним!

ipv6 ready