The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Обзор проблем в коде на C/C++, вызванных неопределённым пове..."
Отправлено Ordu, 08-Июл-17 19:32 
>> Да. Программирование не стоит на месте, развивается. Методов всё больше. Какой кошмар.
> программирование стоит на месте.

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

> Хорошие программы, взрывающие мозг - это bash, qemu,
> openvpn. Там поставлена интересная абстрактная задача.

Ещё упомяни R, Perl, PHP и тому подобную гадость, которая дожила до современности со своим взрывающим мозг синтаксисом.

>> Если ты захочешь, то это значит что ты неудачник. Либо тебе досталась
>> уродская задача, либо ты выбрал не тот подход к её решению.
> Типичный пример ограниченности мышления. Если я захочу, чтобы моя программа легко собиралась
> на любом железе и ос, то наверное я.. псих? А если
> я захочу, чтобы она потребляла меньше 200 мб оперативки, то я
> кто? Романтик? А если я захочу не писать каскад из классов-хелперов?

Смотри, чуть ниже ты пишешь, что не понял о чём я. Но если ты не понял о чём я, то зачем тогда ты гадаешь, делаешь неверные выводы, придумываешь себе соломенное чучело, которое блестяще побеждаешь? Ты действительно думаешь, что использование демагогии позволяет тебе выглядеть умнее, чем ты есть на самом деле? Если ты так думаешь, то ты выглядешь тупее, чем есть на самом деле.

>> Если у тебя есть три аргумента, каждый из которых является дочерним
>> от класса A, и таких дочерних классов у A три штуки
>> -- B, C, D, то тебе придётся писать 3^3 реализаций методов
>> -- (B, B, B), (B, B, C) (C, D, B), (C,
>> C, D), и так далее. 27 долбаных функций. Если ты добавишь
>> к A ещё один дочерний класс, то количество методов скакнёт до
>> 64.
> Намёк не понят. Хочешь наследование - положи структуру в структуру.

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

Если ты не понимаешь о чём я, то возьми CLOS и повтыкай туда, в Common Lisp он такой -- там всё можно. В том числе и методы двух, трёх, да хоть десяти классов.

Если тебе просто абстрактные рассуждения слишком сложны, я могу тебе дать задачку на подумать.

Объявим абстрактный класс Figure, который будет представлять собой геометрическую фигуру. Объявим грядку конкретных классов -- Point, Line, LineSegment, Circle, Arc, BezierCurve, Polygon, Spline ... ну и вообще все которые нам нужны.
А теперь объявим generic метод от двух аргументов:

double distance(Figure &f1, Figure &f2);

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

Если всё ещё не понятно, о чём я, то возьми ассемблер, C, bash, или любой другой язык, который тебе по душе, и попробуй реализовать такую функцию. В процессе написания кода ты быстро поймёшь, о чём я вещаю. Кстати тут вариант ещё щадящий, потому что функция коммутативна, и тебе придётся писать не N^2 конкретных реализаций метода distance, а N*(N-1)/2.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру