Вниз  C / C++
- 23.09.2015 / 17:16
Freddy
  Пользователь

Freddy 
Сейчас: Offline
Цитата Naik:
Неужели компилятор не может посмотреть использования кода и сам все сгенерировать?
Если я не ощибаюсь (в C точно так, в C++ на все 100% не уверен), компилятор однопроходный - разбирает исходный код сверху вниз один раз и не возвращается к нему. Поэтому просканировать весь проект он не в состоянии, да и чересчур долго бы это было на больших проектах.
Нет же, ему нужен факт, что реализации именно в хидере Не ему, а линковщику, и "в одном объектном файле", точнее :)
- 23.09.2015 / 17:59
Naik
  Пользователь

Naik 
Сейчас: Offline
Freddy, ну ладно, вроде разобрался с этим, спасибо за разьяснение
- 23.09.2015 / 18:10
Ксакеп
  Модератор форума

Ксакеп 
Сейчас: Offline
Спустя время решил, что легче все определения класса держать в header'ах, а-ля java.
- 27.09.2015 / 17:18
Naik
  Пользователь

Naik 
Сейчас: Offline
Прикольно, через родительский класс, в котором виртуальный метод публичный можно вызывать приватный метод в дочернем :gg: В java только protected можно
- 27.09.2015 / 18:13
Ксакеп
  Модератор форума

Ксакеп 
Сейчас: Offline
Naik, а ну, покажи.
- 27.09.2015 / 20:37
Naik
  Пользователь

Naik 
Сейчас: Offline
Ксакеп, вызывается метод get, отсюда
https://github.com/NaikSoftwar...List/util/list.h#L30

А в реализации то он приватный)
https://github.com/NaikSoftwar...til/linkedlist.h#L75

Изменено Naik (27.09 / 20:38) (всего 1 раз)
- 27.09.2015 / 21:41
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
Naik, вот в чём магия.
  1. protected:
  2.     virtual T* get(int i) = 0;

В Java же нельзя понижать область видимости родительского метода в дочернем классе.

:ps: И сдаётся мне, что в LinkedList твой private игнорируется и становится protected, как в List.
__________________
 let live

Изменено aNNiMON (27.09 / 21:42) (всего 2 раза)
- 27.09.2015 / 21:48
Naik
  Пользователь

Naik 
Сейчас: Offline
aNNiMON, в java можно тоже так, но только понижать до protected, а не private, что более логично, т.к. предку в любом случае нужны абстрактные методы детей.

Изменено Naik (27.09 / 21:50) (всего 1 раз)
- 27.09.2015 / 22:09
Naik
  Пользователь

Naik 
Сейчас: Offline
Цитата aNNiMON:
:ps: И сдаётся мне, что в
проверил (поместил List::get в public). Нет. Через указатель на LinkedList метод не доступен (не компилится), а если указатель привести к List (понизить), то метод get начинает работать :-D
- 27.09.2015 / 22:46
Naik
  Пользователь

Naik 
Сейчас: Offline
C++ создан чтобы усложнять жизнь :gg:

new LinkedList<char>(*linkedlist));
так не работает, т.к. конструктор принимает абстрактный тип List

А вот с таким явным приведением работает)
new LinkedList<char>(*((List<char>*)linkedlist));
Наверх  Всего сообщений: 2777
Фильтровать сообщения
Поиск по теме
Файлы топика (111)