Russian Qt Forum
Ноябрь 24, 2024, 09:53 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Множественное наследование, виртуальные слоты  (Прочитано 3974 раз)
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();
}

Туплю/Пробел в знаниях - помогите разобраться.
« Последнее редактирование: Май 12, 2012, 09:34 от ammaximus » Записан
mutineer
Гость
« Ответ #1 : Май 12, 2012, 09:45 »

Код:
//IQ::IQ(int digit)
//{
//    IQ();
//    field = digit;
//    qDebug()<< "iq: constructor done, field = " << field;
//}

В С++ нельзя один конструктор из другого вызывать
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #2 : Май 12, 2012, 09:47 »

Код:
//IQ::IQ(int digit)
//{
//    IQ();
//    field = digit;
//    qDebug()<< "iq: constructor done, field = " << field;
//}

В С++ нельзя один конструктор из другого вызывать
А в с++11 можно. Улыбающийся
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
mutineer
Гость
« Ответ #3 : Май 12, 2012, 09:47 »

В С++ нельзя один конструктор из другого вызывать
А в с++11 можно. Улыбающийся

Ты начал в нем ковыряться?Улыбающийся
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Май 12, 2012, 09:55 »

В С++ нельзя один конструктор из другого вызывать
А в с++11 можно. Улыбающийся

Ты начал в нем ковыряться?Улыбающийся
Ага. Годная штука. Особенно лямбды.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
ammaximus
Гость
« Ответ #5 : Май 12, 2012, 09:58 »

Чертова джава... Спасибо ребят))
Записан
ammaximus
Гость
« Ответ #6 : Май 12, 2012, 10:00 »

 Плачущий
Столько времени... И ведь уверен был...
Записан
mutineer
Гость
« Ответ #7 : Май 12, 2012, 10:04 »

Плачущий
Столько времени... И ведь уверен был...

Сужать возможности всегда неприятно
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 22.