Постановка задачи которая бы раскрыла большинство возможностей ООП в С++ ?

программирование C++ ООП

Подскажите пожалуйста задачу, для решения которой понадобилось бы использования большинства методов ООП в C++.
Мне это нужно чтобы начать и изучить С++.

Если есть какая-то хорошая русская литература, для понимания ООП в контексте С++, я буду очень признателен(99 балов):)

Примечание:
"Создать векторный графический редактор. Или для начала - текстовый."
----> Текстовый была идея(самое первое что пришло), на счет векторного спасибо, не думал, так как не в теме векторной графики, но очень спасибо...

Примечание:
"К примеру, составить программу, которая будет отрисовывать (не важно где) различные фигуры, типа прямоугольников, окружностей итп.
Здесь будут задействованы"
---> Большое спасибо, но на уровне основ: полиморфизм, наследование, инкапсуляция.... Уже мне понятно, хочется отработать все: шаблоны, функции- друзья, паттерны. В общем надо какую-то глобальную задачу, типа кубика Рубика. То есть чтобы постоянно находится в теме, оптимизировать написанное, искать ошибки и т.д....
Ответы:
Создать векторный графический редактор. Или для начала - текстовый.
К примеру, составить программу, которая будет отрисовывать (не важно где) различные фигуры, типа прямоугольников, окружностей итп.
Здесь будут задействованы все 3 составляющих ООП (наследование, инкапсуляция, полиморфизм). Т.е., допустим: у тебя будет главный абстрактный класс figure. В нем будут поля (координаты, длина, высота, цвет закраски и пр.), которые соответствуют каждой фигуре, ну и предположим 1 абстрактный метод draw
public void draw() = 0; //насколько я помню именно так определяются абстрактные методы в C++
Поля запривачены (pivate), метод открыт (public) - вот тебе и инкапсуляция.
Далее, 2 класса: rectangle и circle
class rectangle: public figure{ //... }
class circle: public figure{ //... }
Оба они наследуют класс figure (вуаля - наследование), и переопределяют в себе метод draw (тк мы сделали его абстрактным, то это необходимо сделать)
public virtual void draw(){ //... }
Вот и полиморфизм.
Советую прочесть книгу [1]. Ну и соотв. MSDN и прочие веб ресурсы никто не отменял :).
Дополнение #2 , тогда покупайте книгу Страуструпа (хотя можете скачать, но все же лучше бумажную версию). Все, кроме паттернов в этой книге досконально разжевывается. Ну а по паттернам см. [1].
И на последок вот небольшой шаблончик класса-сортировщика [2].
3D геометрический редактор. аля autocad ;) или попроще - для создания мебели, дизайна интерьера и т.п.
при грамотном подходе вам понадобятся в том числе и шаблоны, и паттерны (в пред.примерах можно обойтись и без них...).


15 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.