Estas dos líneas son la llamada lista de inicialización y se ejecutan en el momento de "creación" de cada instancia de esta clase. Cada clase que hereda otro debería contener una llamada al constructor de la superclase en esta lista.
También podría escribir:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
ui = new Ui::MainWindow();
ui->setupUi(this);
}
que se podía encontrar mejor legible. Pero el uso de una lista de inicialización es ligeramente más rápido y está siendo optimizado por el compilador. Tenga en cuenta que estas listas solo se pueden usar en constructores y que no se puede llamar a ninguna función del objeto, porque aún no se "activa". Pero es posible establecer el valor de algunos atributos y se refieren a ellos en las siguientes declaraciones (para evitar la redundancia de código, por ejemplo), como en el siguiente ejemplo:
#define DEFAULT_VALUE 1.0
class MyClass {
public:
MyClass() :
value1(DEFAULT_VALUE),
value2(value1)
{
}
MyClass(qreal value) :
value1(value),
value2(value1)
{
}
private:
qreal value1;
qreal value2;
};
Tenga en cuenta que la mayoría de los compiladores le dan una advertencia si el orden de los miembros en su lista de inicialización no coinciden con el orden en la definición de la clase.
así que esto solo se usa en la función de construcción? o puede ser utilizado en cualquier tipo de fucntions? – Sean
Solo en un constructor. – TonyK
.. pero en todo tipo de constructores, incluidos _copy constructors_. – MSalters