Название: Как интерпретировать мозгом A* x = new B ? Отправлено: lenny от Февраль 11, 2011, 20:19 Добрый вечер! Собственно вот:
Код: class A Название: Re: Как интерпретировать мозгом A* x = new B ? Отправлено: Fat-Zer от Февраль 11, 2011, 20:38 >> //Памяти выделили размером A,
не правда //да еще и B::virt на которую ссылается //vtable x стал закрытым, //т.е. x->virt(); не будет работать. что написали то и получили... в классе A должен был бы быть метод в роде этого: Код
Как интерпретировать мозгом A* x = new B ? Ответ 1... разбираться в с++ в частности и в ООП в общем.//............. Правил что-то много получается. Название: Re: Как интерпретировать мозгом A* x = new B ? Отправлено: lenny от Февраль 11, 2011, 20:59 void A::callVirt()
{ virt(); } Это понятно. Меня интересует зачем изменяется модификатор доступа именно в том случае? В чем логика? Название: Re: Как интерпретировать мозгом A* x = new B ? Отправлено: Fat-Zer от Февраль 11, 2011, 21:23 void A::callVirt() это вопрос к вам... вы же это написали=) и как компилятор должен определять,что метод не private? ведь вся проверка доступа происходит во время компиляции.{ virt(); } Это понятно. Меня интересует зачем изменяется модификатор доступа именно в том случае? В чем логика? Название: Re: Как интерпретировать мозгом A* x = new B ? Отправлено: lenny от Февраль 11, 2011, 21:45 >> //Памяти выделили размером A, А сколько? Проверил, sizeof(*x); вернул 4.не правда Название: Re: Как интерпретировать мозгом A* x = new B ? Отправлено: lenny от Февраль 11, 2011, 21:46 ведь вся проверка доступа происходит во время компиляции. Спасибо!!! Кажется врубился.Название: Re: Как интерпретировать мозгом A* x = new B ? Отправлено: lenny от Февраль 11, 2011, 21:48 это вопрос к вам... вы же это написали=) Логичнее так не делать. Но возможность есть.Название: Re: Как интерпретировать мозгом A* x = new B ? Отправлено: Fat-Zer от Февраль 11, 2011, 22:09 А сколько? Проверил, sizeof(*x); вернул 4. выделяется, само собой, sizeof(B), ведь мы создаём объект класса B. чтоб проверить можно заставить virt в классе B возвращать sizeof(*this);Логичнее так не делать. Но возможность есть. на первый взглад конструкция бесполезная, но может где-то пригодиться... Название: Re: Как интерпретировать мозгом A* x = new B ? Отправлено: lenny от Февраль 11, 2011, 22:42 А сколько? Проверил, sizeof(*x); вернул 4. выделяется, само собой, sizeof(B), ведь мы создаём объект класса B. чтоб проверить можно заставить virt в классе B возвращать sizeof(*this);Получился эквивалент Код: B* z = new B; Это получается, что я запутался на пустом месте :o |