crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Странное поведение при множественном наследовании QObject
aljeshishe
  опции профиля:
сообщение 1.12.2009, 19:52
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 12
Регистрация: 1.12.2009
Пользователь №: 1271

Спасибо сказали: 2 раз(а)




Репутация:   0  


#include <QObject>
class A
{
public:
    A(): a(1){};
    int a;

};

class B :   public A, public QObject
{
public:
    B():A(), b(2){};
    int b;
};
int main(int argc, char* argv[])
{
    void* p = new B;
    A* a = (A*)p;
    int c = a->a;
    return 0;
}

В конце значение с неопределено. Если не наследовать от QObject то все нормально с=1. msvc-2008, qt-4.5.0
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
BRE
  опции профиля:
сообщение 1.12.2009, 20:55
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Добавь магическую строку:
#include <QObject>
class A
{
public:
    A(): a(1){};
        virtual ~A() {}

    int a;

};

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
aljeshishe
  опции профиля:
сообщение 1.12.2009, 21:07
Сообщение #3


Студент
*

Группа: Новичок
Сообщений: 12
Регистрация: 1.12.2009
Пользователь №: 1271

Спасибо сказали: 2 раз(а)




Репутация:   0  


Цитата(BRE @ 1.12.2009, 20:55) *
Добавь магическую строку:
#include <QObject>
class A
{
public:
    A(): a(1){};
        virtual ~A() {}

    int a;

};

Спасибо, как я понял дело в полиморфности QObject. Поясните если не трудно для чего нужна полиморфность класса А.

Цитата(BRE @ 1.12.2009, 20:55) *
Добавь магическую строку:
#include <QObject>
class A
{
public:
    A(): a(1){};
        virtual ~A() {}

    int a;

};

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 1.12.2009, 21:09
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(aljeshishe @ 1.12.2009, 21:07) *
Спасибо, как я понял дело в полиморфности QObject. Поясните если не трудно для чего нужна полиморфность класса А.

Для того, что-бы компилятор смог правильно вычислить смещение до переменной a.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
aljeshishe
  опции профиля:
сообщение 1.12.2009, 21:20
Сообщение #5


Студент
*

Группа: Новичок
Сообщений: 12
Регистрация: 1.12.2009
Пользователь №: 1271

Спасибо сказали: 2 раз(а)




Репутация:   0  



Спасибо
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- aljeshishe   Странное поведение при множественном наследовании QObject   1.12.2009, 19:52
- - Litkevich Yuriy   Цитата(aljeshishe @ 1.12.2009, 22:52) cla...   1.12.2009, 20:10
|- - aljeshishe   Цитата(Litkevich Yuriy @ 1.12.2009, 20:10...   1.12.2009, 20:20
- - BRE   Добавь магическую строку: #include <QObject...   1.12.2009, 20:55
|- - aljeshishe   Цитата(BRE @ 1.12.2009, 20:55) Добавь маг...   1.12.2009, 21:07
|- - BRE   Цитата(aljeshishe @ 1.12.2009, 21:07) Спа...   1.12.2009, 21:09
|- - aljeshishe   Спасибо   1.12.2009, 21:20
- - Litkevich Yuriy   BRE, ничего не изменилось Хм, сделал наследование...   1.12.2009, 21:03
|- - BRE   Цитата(Litkevich Yuriy @ 1.12.2009, 21:03...   1.12.2009, 21:30
|- - aljeshishe   Цитата(BRE @ 1.12.2009, 21:30) Цитата(Lit...   1.12.2009, 23:06
|- - BRE   Ой, не являюсь знатоком стандарта, поэтому точно с...   1.12.2009, 23:23
- - ViGOur   Цитата(BRE @ 1.12.2009, 21:09) Для того, ...   1.12.2009, 21:43
- - ViGOur   Не совсем так, получается примерно так, когда ты с...   1.12.2009, 23:20
- - frg10   Цитата(aljeshishe @ 1.12.2009, 19:52) voi...   1.12.2009, 23:34
|- - aljeshishe   Цитата(frg10 @ 1.12.2009, 23:34) Цитата(a...   2.12.2009, 17:40
- - Litkevich Yuriy   Цитата(ViGOur @ 2.12.2009, 2:20) Если же ...   1.12.2009, 23:41
- - ViGOur   Достаточно одного виртуального метода, не обязател...   2.12.2009, 10:30
- - Litkevich Yuriy   Цитата(aljeshishe @ 2.12.2009, 20:40) При...   2.12.2009, 17:49
|- - aljeshishe   Цитата(Litkevich Yuriy @ 2.12.2009, 17:49...   2.12.2009, 18:18
- - Litkevich Yuriy   Цитата(aljeshishe @ 2.12.2009, 21:18) вир...   2.12.2009, 20:54
- - aljeshishe   Посмотрел как хранится в памяти класс, наследующий...   2.12.2009, 21:48
- - kwisp   поддерживаю fgr10, не было бы void* p = new B; A*...   3.12.2009, 11:38
- - Litkevich Yuriy   Цитата(kwisp @ 3.12.2009, 14:38) как верн...   3.12.2009, 15:29
- - kwisp   Litkevich Yuriy, а как послал?   3.12.2009, 15:58
- - Litkevich Yuriy   вот так: Цитатаmain.cpp:36: error: cannot dynamic_...   3.12.2009, 16:06
|- - AD   Я не могу так. Народ, будьте внимательнее. "С...   3.12.2009, 17:31
- - kwisp   Цитата(Litkevich Yuriy @ 3.12.2009, 16:06...   3.12.2009, 18:24
- - Litkevich Yuriy   kwisp, т.е. в обратную сторону он не преобразует (...   3.12.2009, 18:36
- - kwisp   Litkevich Yuriy, в данном примере ты пытался его ...   4.12.2009, 12:18


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.12.2024, 12:29