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

Понятия инкапсуляции, полиморфизма и наследования - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Решение неравенства http://www.cyberforum.ru/cpp-beginners/thread1086648.html
Задание. Написать программу для решения заданной задачи. В решении обязательно предусмотреть все возможные случаи соотношения параметров задачи, в том числе и случаи, когда задача не имеет решений. Предусмотреть ввод исходных данных с клавиатуры и вывод результатов на экран. Для произвольных значений a, b вычислить решение системы неравенств solvo a/(x-b)<0 && bx>0 Добавлено через 3 часа 7...
C++ Скачал прогу, хотел поставить. Прога выкинула флаг- требуется отладка с помо визуал студио Иначе она не станет. Я согласился. Прога вызвала студию, или студия вызвалась- я не знаю. Очень прикольно и неожиданно. Только что делать? Пожалуйста разъясните! http://www.cyberforum.ru/cpp-beginners/thread1086646.html
C++ Задача с классами С++
Указать на начало списка (список-множество) Методы Найти значение в множестве ( ф-я возвращает 1,если значение найдено, и 0 - в противном случае Добавить значение в мн-во ( если знач. уже есть в мн-ве ,то оно в мн-во не добавляется. Для проверки используйте функцию "найти значение в мн-ве" Вывести текущее состояние в мн-ве (вывести все зн-я)
Юлианский календарь C++
Здаров. Посмотрите пожалуйста задачу И попробуйте решить по разбору. вот что получилось у меня: #include <iostream> using namespace std; int main()
C++ Функции сложения, вычитания, умножения и деления двух чисел http://www.cyberforum.ru/cpp-beginners/thread1086630.html
Не могу найти ошибок,программа не правильно работает. Вот условие : Напишите программу, которая использукет 4 функции. Каждая функция используется для сложения, вычитания, умножения и деления двух чисел соответственно. Передавайте параметры по значению. Используйте цикл while, который будет вызывать функции на выбор пользователя и после выполнения справшивать: "Do you want to quit?(y/n): "....
C++ Оптимальный путь Доброго времени суток! Прошу у вас помощи) Есть задача на поиск оптимального пути Алгоритм задачи: 1)А-массив,описывающий значение коэффициентов по строкам,размерность 2)В-массив,описывающий значение коэффициентов по столбцам ,размерность 3)С-массив,описывающий значение в узлах решетки 4)D-массив,описывающий найденный путь В итоге должна получится матрица,в которой другим цветов... подробнее

Показать сообщение отдельно
rrrFer
Заблокирован
01.02.2014, 18:34     Понятия инкапсуляции, полиморфизма и наследования
Цитата Сообщение от Avazart Посмотреть сообщение
Может у Мейерса ? У него вроде есть об этом и у него "правила", а у Саттера вроде в "задачах" все.
Может и у Мейерса, но я Саттера читал.
Открытое наследование в соответствии с принципом подстановки Лисков (Liskov Substitution Principle [Liskov88]) всегда должно моделировать отношение "является" ("работает как"): все контракты базового класса должны быть выполнены, для чего все перекрытия виртуальных функций-членов не должны требовать большего или обещать меньше, чем их базовые версии. Код, использующий указатель или ссылку на Base, должен корректно вести себя в случае, когда указатель или ссылка указывают на объект Derived.
Цитата Сообщение от korvin_ Посмотреть сообщение
http://citforum.ru/programming/digest/lspv/
Спасибо за ссылку, там как раз пример с квадратом и прямоугольником. Весь текст я не осилил, но понял, что автор пытается доказать, что именно в случае наследования квадрата от прямоугольника правило подстановки нарушается. Посмотрел его аргументы (без контекста) - не убедился. Да и сам автор пишет:
Можно было бы возразить автору, что принцип подстановки плохо сформулирован, что не определен термин замена (хотя в данном примере все понятно: в программу передается ссылка на объект подкласса), что непонятен термин поведение программы и так далее.
Суть в том, что пример взят простой. С точкой и окружностью сложнее. Для этих случаев все разобрано по полочкам, но даже так нет единого мнения и холивары продолжаются.

Цитата Сообщение от Avazart Посмотреть сообщение
Основная трудность в данном случае заключается в том, что некоторые утверждения, справедливые для прямоугольника (его ширина может быть изменена независимо от высоты), не выполняются для квадрата (его ширина и высота должны быть одинаковы).
Но открытое наследование предполагает, что все, что применимо к объектам базового класса, - все! -также применимо и к объектам производных классов. В ситуации с прямоугольниками и квадратами (а также в аналогичных случаях, включая множества и списки из правила 38), утверждение этого условия не выполняется, поэтому использование открытого наследования для моделирования здесь некорректно
Если прочитать все внимательно, а не только выделенный вывод в конце - то можно заменить, что все не так гладко.
Это очень коротко изложенное содержание статьи по ссылке korvin_-а .
Источник холиваров в том, что математика вообще не определяет никаких операций над прямоугольником. Автор этого текста почему-то решил, что надо изменять его высоту, независимо от ширины. У меня есть сомнения. Мало того, квадрат может предоставлять такой же интерфейс, а ("контракт" у Саттера) значит, принцип подстановки сработает. Но в реализации методов будет фича - при изменении ширины будет изменяться высота. Почему-то в этом случае такая фича всех пугает, но в более сложных примерах, возникающих в практике постоянно - нет.
 
Текущее время: 20:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru