реклама на сайте
подробности

 
 
> Иерархия классов, непонятное поведение IAR
Непомнящий Евген...
сообщение Aug 9 2007, 07:57
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



IAR 4.20 + atmega128

Есть иерархия классов
Код
class TNonVirtual // нет виртуальных функций
{
    int a, b;
public:
    void f1(int c) {a = c;}
    void f2(int c) {b = c;}
};

struct IInterf // только чисто виртуальные ф-ции
{
    virtual void vf1() = 0;
};

class TUnion : public TNonVirtual, public IInterf
{
// нет данных или методов, нужен чтобы не переделывать имеющийся код
};

class TRes : public TUnion
{
    int abc;
public:
    void vf1() {abc = 6; }
};

TRes global;

Размер global - 10 байт. Смотрю в AVR studio:
Код
global
  TUnion
     TNonVirtual
        a
        b
     IInterf
        __vptr
  abc
  __vptr

Вопрос: А зачем нужна TRes::__vptr, если внутри TRes нет своих виртуальных ф-ций, а только реализации ф-ций IInterf?

Причем если переписать так:
class TUnion : public IInterf, public TNonVirtual - т.е. поставить сначала наследование от интерфейса, а потом - от класса без виртуальных ф-ций, то TRes::__vptr исчезает и размер global становится 8 байт.
Странно как-то...

Сообщение отредактировал Непомнящий Евгений - Aug 9 2007, 07:58
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 01:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.01365 секунд с 7
ELECTRONIX ©2004-2016