LINUX.ORG.RU

virtual void push ( T ) = 0;

 


0

2

Прочитал,

Обозначение =0 показывает, что для виртуальной функции не требуется никакого определения.

Это что значит, что можно и не переопределять функцию?

Ответ на: комментарий от nikolnik

В определении класса? Вроде, по стандарту в с++ abstract указывать не нужно для абстрактного класса. Вы с MS c++ не путаете?

plgrm44
()
Ответ на: комментарий от plgrm44

0 - отсутствие реализации

но реализация у чиста виртуального метода может быть, и её можно вызывать из классов-наследников.

former_anonymous ★★★
()
Последнее исправление: former_anonymous (всего исправлений: 1)
Ответ на: комментарий от former_anonymous

Реализации у «чиста» виртуального метода не может быть по определению, иначе это будет уже ни «чиста», а виртуальный метод.

plgrm44
()
Ответ на: комментарий от plgrm44

Реализации у «чиста» виртуального метода не может быть по определению

В стандарте написано, что реализация не обязательна, но я не нашёл запрета на реализацию: «A pure virtual function need be defined only if called with, or as if with (12.4), the qualified-id syntax (5.1).»

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Погуглил. Оказывается может быть. Никогда не использовал. Мне казалось, что абстрактный класс не должен знать, как что-то конкретное делать...

plgrm44
()
Ответ на: комментарий от plgrm44

абстрактный класс не должен <...>

Ага. А ещё приватные поля члены класса ни при каких условиях не должны быть доступны другим классам и функциям. И константные методы не должны изменять состояние объекта. Нельзя. Но иногда очень хочется...

i-rinat ★★★★★
()
Ответ на: комментарий от plgrm44

Только одно НО: таких вещей нужно избегать! Если вы приходите к этому, то у вас проблемы с архитектурой.

Я не говорю, что это не так. Но есть как минимум по одному в меру нормальному примеру для этих двух «вещей, которых нужно избегать». Такой уж язык, его из-за этого и используют.

i-rinat ★★★★★
()
Ответ на: комментарий от former_anonymous

Ну, топором тоже можно дрова рубить, а можно людей на тот свет отправлять... Вы же не будете говорить, что проблема в топоре?

plgrm44
()
Ответ на: комментарий от former_anonymous

проблема прежде всего с языком

Проблема не с языком, проблема с использованием языка. Проблема с теми, кто выбирает Си или Си++ только потому что это круто. Проблема с теми, кто вместо того, чтобы пытаться писать понятный код, начинают развлекаться с трюками: «смотри, как я могу».

i-rinat ★★★★★
()
Ответ на: комментарий от plgrm44

Оператор вывода объекта в поток, например в std::cout, реализуется отдельной функцией, которая объявляется другом класса. Тяжёлые вычисления в константном методе имеет смысл выполнять только по запросу, если результат нужен не всегда. Результат при этом нужно как-то кешировать, чтобы следующие вызовы были дешевле.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Друзья классов разве запрещены в ООП? Про оператор вывода: речь идет о том, что внутри своего класса нельзя перегрузить оператор «<<», который брал бы на вход указатель на объект?

plgrm44
()
Ответ на: комментарий от plgrm44

Друзья классов разве запрещены в ООП?

Для ответа на этот вопрос нужно определить, что такое ООП. Можно, например, запретить это в своём определении. Общепринятого определения всё равно нет.

внутри своего класса нельзя перегрузить оператор «<<», который брал бы на вход указатель на объект?

Я не очень хорошо себе представляю, как это можно было бы сделать перегрузкой оператора внутри класса.

i-rinat ★★★★★
()
Ответ на: комментарий от plgrm44

Ну могу путать, конечно, я не цппшник. Хотя глянул, слово abstract даже не зарезервировано.

nikolnik ★★★
()
Ответ на: комментарий от former_anonymous

Ну вообще я подумал, в принципе страуструп не смог бы запилить как в шарпе, ибо шарпа тогда еще не существовало :)

nikolnik ★★★
()

По сабжу, это значит, что функция в обязательном порядке должна быть определена в классах, производных от твоего базового.

А сколько Вам лет, молодой человек, что Вы задаёте подобные вопросы? :-)

Twissel ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.