Об'єктна модель
Для ефективної роботи з класами на стадії виконання в Qt використовується спеціальна об'єктна модель, що розширює модель C++. Зокрема, додаються такі можливості:
- деревовидні ієрархії об'єктів;
- аналог dynamic_cast для бібліотеки, який не використовує RTTI;
- взаємодія об'єктів через сигнали і слоти;
- властивості об'єктів.
Багато об'єктів визначаються значенням відразу декількох властивостей, внутрішніми станами і зв'язками з іншими об'єктами. Вони являють собою індивідуальні сутності, і для них не має сенсу операція буквального копіювання, а також поділ даних в пам'яті. В Qt ці об'єкти успадковують властивості QObject.
У тих випадках, коли об'єкт потрібно було б розглядати не як сутність, а як значення (наприклад, при зберіганні в контейнері) - використовуються покажчики. Іноді покажчик на об'єкт, що успадковується від QObject, називають просто об'єктом.
Інструментарій спроектований так, що для QObject і всіх його нащадків конструктор копіювання і оператор присвоювання недоступні - вони оголошені в розділі private через макрос Q_DISABLE_COPY ():
class FooBar : public QObject
{
private:
Q_DISABLE_COPY(FooBar)
};
Будьте уважні і не використовуйте конструкцію
Foo bar = Foo (baz);
замість
Foo bar (baz);
Інші об'єкти (наприклад, контейнери і рядки) повністю визначаються уявними даними, тому у відповідних класах є операція присвоювання і конструктор копіювання. Крім того, об'єкти, що представляють однакові дані, можуть прозоро для програміста розділяти їх в пам'яті.
|