Russian Qt Forum

Qt => Вопросы новичков => Тема начата: ammaximus от Май 12, 2012, 09:28



Название: Множественное наследование, виртуальные слоты
Отправлено: ammaximus от Май 12, 2012, 09:28
Множественным наследованием никогда не пользовался, просто не приходилось. Сейчас такая ситуация:

1. Класс IQ (Interhit Qobject) - наследник QObjecta
Код:
#include <QObject>

#include <QDebug>
#include <QTimer>

class IQ : public QObject
{
Q_OBJECT
public:
    IQ();
    IQ(int);
    QTimer *mainTimer;
    int field;
public slots:
    virtual void work();
};
////////////////////////////////////////// Implement
#include "iq.h"

IQ::IQ()
{
    qDebug()<< "iq: empty constructor";
}

IQ::IQ(int digit)
{
    field = digit;
    mainTimer = new QTimer(this);
    connect (mainTimer, SIGNAL(timeout()), this, SLOT(work()));
    qDebug()<< "iq: constructor done, field = " << field;
    mainTimer->start(1000);
}

void IQ::work()
{
    // nothing
    qDebug()<< "VTable mismatch ";
}
                ///  What i wanna get:
//IQ::IQ()
//{
//    mainTimer = new QTimer(this);
//    connect (mainTimer, SIGNAL(timeout()), this, SLOT(work()));
//    mainTimer->start(1000);
//    qDebug()<< "iq: empty constructor";
//}
//
//IQ::IQ(int digit)
//{
//    IQ();
//    field = digit;
//    qDebug()<< "iq: constructor done, field = " << field;
//}
//
//void IQ::work()
//{
//    // nothing
//    qDebug()<< "VTable mismatch ";
//}


Закомментированный код - то что не работает. Почему-то перенося функцию в конструктор по умолчанию перестает циклически вызываться work.

Остальные файлы:

Код:
#include <QDebug>

class data
{
public:
    data();
    int smthg;
};

Код:
#include "data.h"

data::data()
{
    smthg = 0;
    qDebug()<< "smthg constructed";
}

Код:
#include "iq.h"
#include "data.h"

class result:public IQ, data
{
Q_OBJECT
public:
    result();
    result(int);

public slots:
    virtual void work();
};

Код:
#include "result.h"

result::result()
{
    qDebug() << "Result: empty constructor";
}

result::result(int digit):IQ(digit), data()
{
    qDebug() << "Result: parametr constructor";
}

void result::work()
{
    qDebug() << "Result: what i wanna see";
}


Код:
#include "result.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication app(argc,argv);
    result *a = new result(4);
    return app.exec();
}

Туплю/Пробел в знаниях - помогите разобраться.


Название: Re: Множественное наследование, виртуальные слоты
Отправлено: mutineer от Май 12, 2012, 09:45
Код:
//IQ::IQ(int digit)
//{
//    IQ();
//    field = digit;
//    qDebug()<< "iq: constructor done, field = " << field;
//}

В С++ нельзя один конструктор из другого вызывать


Название: Re: Множественное наследование, виртуальные слоты
Отправлено: Пантер от Май 12, 2012, 09:47
Код:
//IQ::IQ(int digit)
//{
//    IQ();
//    field = digit;
//    qDebug()<< "iq: constructor done, field = " << field;
//}

В С++ нельзя один конструктор из другого вызывать
А в с++11 можно. :)


Название: Re: Множественное наследование, виртуальные слоты
Отправлено: mutineer от Май 12, 2012, 09:47
В С++ нельзя один конструктор из другого вызывать
А в с++11 можно. :)

Ты начал в нем ковыряться?:)


Название: Re: Множественное наследование, виртуальные слоты
Отправлено: Пантер от Май 12, 2012, 09:55
В С++ нельзя один конструктор из другого вызывать
А в с++11 можно. :)

Ты начал в нем ковыряться?:)
Ага. Годная штука. Особенно лямбды.


Название: Re: Множественное наследование, виртуальные слоты
Отправлено: ammaximus от Май 12, 2012, 09:58
Чертова джава... Спасибо ребят))


Название: Re: Множественное наследование, виртуальные слоты
Отправлено: ammaximus от Май 12, 2012, 10:00
 :'(
Столько времени... И ведь уверен был...


Название: Re: Множественное наследование, виртуальные слоты
Отправлено: mutineer от Май 12, 2012, 10:04
:'(
Столько времени... И ведь уверен был...

Сужать возможности всегда неприятно