Раньше не советовали использовать, как обстоят дела сейчас? И вообще какие поводные камни есть, а то я никак в толк не возьму чем это так плохо. Заранее спасибо.
mitroxa
> я никак в толк не возьму чем это так плохо
Это НЕ плохо.
А теперь, как было сказано в одной рекламе:
Now stop worrying, and enjoy your life.
Почитал на тему. Все пишут только про проблему совпадения имен функций и переменных, что не так страшно ИМХО.
это видимо зависит от религии:)
а "проблема" совпадений имен функций и переменных - это не "проблема" множественного наследования. в той же Java при имплементации нескольких интерфейсов есть возможность создать такую ситуацию, хотя множественным наследованием это не будет.
сам использовал множественное наследование с виртуальным базовым классом только однажды) очень религиозен:)
Меня тоже религия напрягает, так бы и думать не стал. Но в авторитетных книгах пишут)
mitroxa
а чо пишут в авторитетных книгах? чем аргументируют в первую очередь?
=A=L=X=
Дак не аргументируют, в этом и проблема. Я нашел только про совпадение имен. Создал топик вдруг кто еще какие проблемы знает.
Вот никак понять не могу. При использовании виртуального базового класса.
Конструктор вызывается один раз. А памяти жрет все-равно на несколько экземпляров. Почему так происходит, он что несколько копий базового хранит чтоли?
mitroxa
> Конструктор вызывается один раз. А памяти жрет все-равно на несколько экземпляров. Почему так происходит....
Ты вообще соображаешь что пытаешься спросить? Конструкторы и память вообще между собой как связаны? Ты вообще с C++ знаком не по наслышке?
=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;
В этом случае конструктор вызвается два раза.
Что-то я запутался с памятью, сори, щас буду разбираться.
mitroxa
> В этом случае конструктор класса base вызывается один раз.
mitroxa
> В этом случае конструктор вызвается два раза.
В приведённый примерах так и должно быть. Всё правильно.
Никак не могу понять, при обычном (не виртуальном) наследовании память для хранения переменных объекта базового класса выделяется два раза? Или в обоих случаях два раза? Или в обоих случаях один раз? Запутался, оператор
sizeof()
ясной картины не дает. Вообще интересно было бы почитать как с++ размещает классы в памяти, я раньше думал так же как и структуры, теперь хз.
меня в своё время нехило напряг размер получающейся стурктуры - на каждый базовый класс по 4 байта памяти под vtbl было тогда непростительно - локальность данных, напрямую зависящая от размера структуры, была первоочередным требованием.
много раз уже говорилось, что в C++ классы и структуры отличаются только дефолтным модификатором доступа - private vs public, больше ничем вообще.
Suslik
> много раз уже говорилось, что в C++ классы и структуры отличаются только
> дефолтным модификатором доступа - private vs public, больше ничем вообще.
Это да, знаю.
Suslik
> меня в своё время нехило напряг размер получающейся стурктуры - на каждый
> базовый класс по 4 байта памяти под vtbl было тогда непростительно -
> локальность данных, напрямую зависящая от размера структуры, была
> первоочередным требованием.
Вот видимо в этом проблема у меня, спасибо.
Тема в архиве.