Форум программистов, компьютерный форум CyberForum.ru

Сложность абстракции, полиморфизм, дублирование и другие - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Перестановка элементов по заданному правилу http://www.cyberforum.ru/cpp-beginners/thread392038.html
Даны массив А размерности N*M и массив В размерности М.Элементы первого столбца массива А упорядочены по невозрастанию.Включить массив В в качестве новой строки в массив А с сохранением упорядоченности. Заранее спасибо.
C++ Не могу понять ошибку. При вводе значений вылетает программа. Задача: Дана система 2-х сторонних дорог. Известна цена на каждом пути. Определить убыток при закрытии дороги. Алгоритм: Функция "poisk" в моей программе находит в графе и выводит самый дешёвый путь (вершины) и его цену. Функция "del" удаляет в матрице инцидентности цену на указанном пути. Исходные данные с файла, где 1 строка кол-во вершин. Проблема: Прога работает лишь при использовании... http://www.cyberforum.ru/cpp-beginners/thread392037.html
Найти путь из А в И C++
Есть у нас точка А и точка В. Идем с А в В, найти пути, которые будут равны 250 и 350 очок. Одна из идей - построить биннарное дерево и обойти. Собственно, интересует как лучше (читать правильно) представить ето (та и граф напоминает, но вага узлов? а не ребер)? http://*************/clip/m0/1321924569-clip-32kb.jpg?nocache=1
C++ функция класса - вызов
есть класс Graph с функцией int OutputMatrix(int i,int j); и матрица int **Matrix; в области private, в cpp я описал функцию: int Graph::OutputMatrix(int i,int j){ int k; k=Matrix; return k; } правильно ли я ее вызываю? int i=1; int j=1;
C++ Поиск в стеке! http://www.cyberforum.ru/cpp-beginners/thread392015.html
Помогите решить: нужно найти сколько элементов стека находится между его минималь- ным и максимальным элементами. Вот что у меня есть #include <iostream> using namespace std; struct tstk { int inf; tstk *a; }sp;
C++ Прямоугольный массив, сортировка В прямоугольном массиве(7 на 8) с по-мощью процедуры сделать все строки упорядоченными по воз-растанию. Исходные числа из файла читать, начиная с "К"-го числа, где К<10 вводить с кла-виатуры. 1) Печатать массив до и после сортировки с помощью проце-дуры. 2) Построить процедуру, кото-рая в заказанной строке переда-ваемого ей прямоугольного массива упорядочивает элемен-ты по убыванию методом... подробнее

Показать сообщение отдельно
Bers
Заблокирован
27.11.2011, 00:30  [ТС]
ForEveR, ну я на самом деле уже догадываюсь, почему непонятка вышла.

1.
Класс имеет: прототипы методов, и реализацию этих прототипов (не всегда, и не для всех методов)

Класс не обязан содержать реализацию своего интерфейса, и тогда его называют "чисто-абстрактным классом". То есть, это интерфейс - суть набор прототипов методов, которые будут реализовывать потомки.

Ну так вот, список всех прототипов - это интерфейс класса.
а реализация этих прототипов - это реализация интерфейса класса.


То есть, под словом "интерфейс" лично я подразумеваю именно набор прототипов, а не набор прототипов + их реализации.

А вы походу, думаете, что интерфейс это и прототипы, и реализация.

2.
Код на с++ - это все символы из которых конструируется код в терминах с++, включая комментарии.

Заголовок класса - такой же полноценный код на с++, как и реализация этого класса.
И дублирование интерфейса (прототипов) полиморфного потомка является дублированием кода написанного на с++.

Существует множество способов, как можно избежать этого дублирования.
Самый простой и убогий - это например препроцессор (прототипы в отдельном хедере, и инклюдяццо везде, где они нужны)

Одно из моих достижений в этой области - использование кодо-генераторов на макросах с автоматической "чисткой".

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

Однако после первой же удачной компиляции срабатывает "чистка", и вместо "непонятного макроса" в файле оказывается полноценный класс, со всеми своими данными-членами и прочим.
Это тоже дублирование кода, но оно происходит автоматически, и не отбирает у программиста много времени.

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

Например, с помощью кодо-генераторов на макросах удалось реализовать идиому "манипулятивных классов" - как одну из возможных замечательных альтернатив полиморфизму.

Смысл которой: если нужно обрабатывать одни и те же данные, но только разными способами, не обязательно городить огород из полиморфов, а можно просто сделать несколько различных обработчиков, умеющих "подключатся" к данным и делать над ними действия.

В данный момент, мне что бы создать очередную заготовку под манипулятор, нужно написать только три строчки макроса.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru