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 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.