LINUX.ORG.RU

тупой вопрос по C++


0

0

Как лучше всего проинициализировать массив член класса.
Например:

class A{
public:
A();
QString onemsg;
QString messages[2][2];
};

A::A(): onemsg("something"), /*а что писать здесь*/{
/*или здесь?*/
}

Deleted

>QString messages[2][2]; зачем вообще этот изврат?

anonymous
()

A::A() : 
    onemsg(tr("something")) 
{
    messages[0][0] = tr("Messages 0 0");
    messages[0][1] = tr("Messages 0 1");
    messages[1][0] = tr("Messages 1 0");
    messages[1][1] = tr("Messages 1 1");
}


Кстати вместо C-like массивов возможно стоит использовать класс std::vector или QVector. Впрочем инициализация не изменится.

Legioner ★★★★★
()

лучше всегда использовать список инициализации если это возможно, иначе все члены класса инициализируются по умолчанию.

phoenix ★★★★
()
Ответ на: комментарий от Legioner

Спасибо. Хотя там ведь будет создаваться временный объект и вызываться копи-конструктор?

А "изврат" нужен для упрощения писанины, чтобы вместо того чтобы городить if-ы и swicth-и написать просто x->setText(messages[b1][b2]);

Deleted
()
Ответ на: комментарий от Deleted

Может тогда так?

class A{
public:
A();
QString onemsg;
QString messages[4];
};

A::A(): onemsg("something"), messages({"A","B","C","D"}){
}

QString A::B(int b1,int b2){
return messages[b1*2+b2];
}

YesSSS ★★★
()
Ответ на: комментарий от Deleted

> Спасибо. Хотя там ведь будет создаваться временный объект и вызываться копи-конструктор?
Да, но для QString-ов это не существенно, т.к. там используется reference counting, фактически копирование строки будет сводится к копированию указателя.

Legioner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.