Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
161 / 153 / 92
Регистрация: 18.11.2015
Сообщений: 677
1

Практика С++

24.04.2016, 22:47. Показов 2939. Ответов 6

Author24 — интернет-сервис помощи студентам
Привет, изучаю я тут С++ и понимаю, что практики недостаточно (а без практики - выйду после изучения нулем).

Я прошел темы про указатели, виртуальные функции, абстрактные классы и т.п. Но у меня никак не приходит в голову, как их практиковать. Все говорят, что это очень полезные вещи, мол, пригодятся, когда на работу пойду, и все дела. Но почему?

Вот мои вопросы:
Зачем же именно указатель на класс создавать (простите за глупый вопрос, но я серьезно не понимаю)?
Виртуальные методы нужны только когда мы будем использовать указатель на класс-родитель?
Диструктор абсолютно всегда должен быть виртуальным, когда есть наследование?
Смогу ли я хоть как-нибудь обойтись без наследования в будущем, когда буду работать над серьезными проектами, и, возможно, в какой-то компании?
Как часто используют указатели на класс-родитель вообще (имеется ввиду, в серьезных проектах, игровых движках, например)?
И этот вопрос самым опытным: как часто вы сами используете вышеперечисленные техники? Почему?


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

Добавлено через 8 минут
Скажу сразу, читал много на стак оверфлоу, понял какую-то часть. Но все равно, хочу попрактиковать эти техники, чтобы в будущем не боялся их.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.04.2016, 22:47
Ответы с готовыми решениями:

Практика
Привет форумчане ! Есть ли желающие практиковать по с++ ? т.к на чтение книг нету времени ! Учеба в...

Практика
Создать абстрактный класс с виртуальной функцией: норма.Создать производные классы: комплексные...

практика
какую книгу посоветуете по практике где идет разбор программ.

Практика!
Имеется таблица футбольного чемпионата, в котором участвовало n команд (см. задачу 413). Таблица...

6
Одессит
243 / 88 / 44
Регистрация: 30.12.2013
Сообщений: 316
Записей в блоге: 2
24.04.2016, 22:58 2
Понять зачем нужны наследования, указатели на базовый класс мне помогло изучение паттернов. Только лучше поискать примеры где не просто а+b. Я читал книгу Фримена по паттернам, она для джавы, но там код легко делается для с++ и примеры интересные.
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
24.04.2016, 23:26 3
Цитата Сообщение от meJevin Посмотреть сообщение
Зачем же именно указатель на класс создавать (простите за глупый вопрос, но я серьезно не понимаю)?
на класс указатель создать невозможно, возможно на объект класса, зачем? затем зачем и указатели на другие типы, например аргумент в функцию
Цитата Сообщение от meJevin Посмотреть сообщение
Виртуальные методы нужны только когда мы будем использовать указатель на класс-родитель?
нет
виртуальная функция это такая функция которая будет реализована по разному у предка и у наследников
например есть класс "Фигура" от неё наследуются классы " Прямоугольник", "Круг" и какие то еще. У всех есть метод "Рисовать"
Реализуешь так чтобы у прямоугольника рисовался прямоугольник, у круга круг, ну и так далее
0
77 / 50 / 16
Регистрация: 17.05.2015
Сообщений: 262
25.04.2016, 01:00 4
Попробуй создать игру, где есть НПЦ, игрок, обьекты с которыми возможно взаимодействие. С самой-самой примитивной или даже псевдо графикой.

Для создания гибкой игры, тебе придется работать с наследованием.
пример (надеюсь отступы не поедут)
Код
Actor -> Object -> Mesh -> staticMesh
      \                  \-> Model
       \                         
        \-> Character
                    \->NPC
                     \->Player
Тут тебе придется и виртуальные методы делать.

Потом в игре встанет вопрос "Как и где хранить все объекты".
Первое что ты скорее всего сделаешь - будешь их пихать в вектор.
Но потом ты поймешь, что тебе удобнее создавать объекты динамически, а для работы с ними, просто помещать указатель куда то.
В итоге ты будешь оперировать объектами только через указатели.
Но потом начнется новая проблема, если ты захочешь игру делать 2/3D пространстве, не по клеткам, то встанет вопрос "поиск соседа".
Как просчитывать коллизии, как они должны искать друг друга. От сюда тебе придется писать что-то типо QuadTree или octTree. Тут уже без указателей ну никак. Ты будешь из одного дерева в другое кидать указатели туда-сюда, по мере движения объектов.
0
161 / 153 / 92
Регистрация: 18.11.2015
Сообщений: 677
25.04.2016, 12:33  [ТС] 5
Цитата Сообщение от ValeryS Посмотреть сообщение
нет
виртуальная функция это такая функция которая будет реализована по разному у предка и у наследников
например есть класс "Фигура" от неё наследуются классы " Прямоугольник", "Круг" и какие то еще. У всех есть метод "Рисовать"
Реализуешь так чтобы у прямоугольника рисовался прямоугольник, у круга круг, ну и так далее
Хорошо, а почему бы тогда не создать отдельные классы под прямоугольник и круг, вместо того, чтобы их наследовать?
0
return (true);
1976 / 1111 / 221
Регистрация: 19.04.2011
Сообщений: 2,345
25.04.2016, 12:45 6
Цитата Сообщение от meJevin Посмотреть сообщение
а почему бы тогда не создать отдельные классы
Потому-что они обладают общими свойствами, позволяющими выделить более крупный абстрактный объект, например координатами. Вот чтобы в каждом классе не повторять одни и те же свойства.
1
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
25.04.2016, 14:36 7
meJevin, ну, вы книжки по языку почитали, но чтобы понять для чего нужны классы и как ими пользоваться, вам нужно еще и книги по ООП обязательно почитать.
0
25.04.2016, 14:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.04.2016, 14:36
Помогаю со студенческими работами здесь

Практика
Помогите с алгоритмом или как это решать ? 1. Дано натуральное число р. Получить...

Практика С++
Сегодня начали изучать C++. Пока только умею прятать кнопки, изменять текст и тд. Какие простенькие...

Практика по с++
1)Дан массив целых чисел. Найти в этом массиве минимальный элемент m и максимальный элемент M....

Практика на C++
]Всем привет. Хочу найти практические задачи на C++. Так вот, я студент, самие понимаете - конец...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru