ФлеймФорумПрограммирование

Множественное наследование, виртуальный базовый класс.

Страницы: 1 2 Следующая »
#0
19:33, 8 ноя 2009

Раньше не советовали использовать, как обстоят дела сейчас? И вообще какие поводные камни есть, а то я никак в толк не возьму чем это так плохо. Заранее спасибо.

#1
19:49, 8 ноя 2009

mitroxa
> я никак в толк не возьму чем это так плохо

Это НЕ плохо.

А теперь, как было сказано в одной рекламе:
Now stop worrying, and enjoy your life.

#2
19:53, 8 ноя 2009

Почитал на тему. Все пишут только про проблему совпадения имен функций и переменных, что не так страшно ИМХО.

#3
20:28, 8 ноя 2009

это видимо зависит от религии:)
а "проблема" совпадений имен функций и переменных - это не "проблема" множественного наследования. в той же Java при имплементации нескольких интерфейсов есть возможность создать такую ситуацию, хотя множественным наследованием это не будет.
сам использовал множественное наследование с виртуальным базовым классом только однажды) очень религиозен:)

#4
20:39, 8 ноя 2009

Меня тоже религия напрягает, так бы и думать не стал. Но в авторитетных книгах пишут)

#5
20:54, 8 ноя 2009

mitroxa

а чо пишут в авторитетных книгах? чем аргументируют в первую очередь?

#6
20:59, 8 ноя 2009

=A=L=X=
Дак не аргументируют, в этом и проблема. Я нашел только про совпадение имен. Создал топик вдруг кто еще какие проблемы знает.

#7
21:27, 8 ноя 2009

Вот никак понять не могу. При использовании виртуального базового класса.
Конструктор вызывается один раз. А памяти жрет все-равно на несколько экземпляров. Почему так происходит, он что несколько копий базового хранит чтоли?

#8
21:42, 8 ноя 2009

mitroxa

> Конструктор вызывается один раз. А памяти жрет все-равно на несколько экземпляров. Почему так происходит....

Ты вообще соображаешь что пытаешься спросить? Конструкторы и память вообще между собой как связаны? Ты вообще с C++ знаком не по наслышке?

#9
21:56, 8 ноя 2009

=A=L=X=
> Ты вообще соображаешь что пытаешься спросить? Конструкторы и память вообще
> между собой как связаны? Ты вообще с C++ знаком не по наслышке?
Ну так учусь помаленьку. Не совсем правильно выразился.

class  base;

class  c1 : virtual public base;

class  c2 : virtual public base;

class  some : public c1, public c2;

В этом случае конструктор класса base вызывается один раз.

class  base;

class  c1 : public base;

class  c2 : public base;

class  some : public c1, public c2;

В этом случае конструктор вызвается два раза.

Что-то я запутался с памятью, сори, щас буду разбираться.

#10
23:36, 8 ноя 2009

mitroxa
> В этом случае конструктор класса base вызывается один раз.
mitroxa
> В этом случае конструктор вызвается два раза.

В приведённый примерах так и должно быть. Всё правильно.

#11
0:12, 9 ноя 2009

Никак не могу понять, при обычном (не виртуальном) наследовании память для хранения переменных объекта базового класса выделяется два раза? Или в обоих случаях два раза? Или в обоих случаях один раз? Запутался, оператор

sizeof()

ясной картины не дает. Вообще интересно было бы почитать как с++ размещает классы в памяти, я раньше думал так же как и структуры, теперь хз.

#12
1:05, 9 ноя 2009

меня в своё время нехило напряг размер получающейся стурктуры - на каждый базовый класс по 4 байта памяти под vtbl было тогда непростительно - локальность данных, напрямую зависящая от размера структуры, была первоочередным требованием.

много раз уже говорилось, что в C++ классы и структуры отличаются только дефолтным модификатором доступа - private vs public, больше ничем вообще.

#13
1:08, 9 ноя 2009

Suslik
> много раз уже говорилось, что в C++ классы и структуры отличаются только
> дефолтным модификатором доступа - private vs public, больше ничем вообще.
Это да, знаю.

Suslik
> меня в своё время нехило напряг размер получающейся стурктуры - на каждый
> базовый класс по 4 байта памяти под vtbl было тогда непростительно -
> локальность данных, напрямую зависящая от размера структуры, была
> первоочередным требованием.
Вот видимо в этом проблема у меня, спасибо.

#14
13:06, 9 ноя 2009

Вот здесь про виртуальное наследование, память и как это все работает

Страницы: 1 2 Следующая »
ФлеймФорумПрограммирование

Тема в архиве.