161 / 153 / 92
Регистрация: 18.11.2015
Сообщений: 677
|
|
1 | |
Практика С++24.04.2016, 22:47. Показов 2939. Ответов 6
Привет, изучаю я тут С++ и понимаю, что практики недостаточно (а без практики - выйду после изучения нулем).
Я прошел темы про указатели, виртуальные функции, абстрактные классы и т.п. Но у меня никак не приходит в голову, как их практиковать. Все говорят, что это очень полезные вещи, мол, пригодятся, когда на работу пойду, и все дела. Но почему? Вот мои вопросы: Зачем же именно указатель на класс создавать (простите за глупый вопрос, но я серьезно не понимаю)? Виртуальные методы нужны только когда мы будем использовать указатель на класс-родитель? Диструктор абсолютно всегда должен быть виртуальным, когда есть наследование? Смогу ли я хоть как-нибудь обойтись без наследования в будущем, когда буду работать над серьезными проектами, и, возможно, в какой-то компании? Как часто используют указатели на класс-родитель вообще (имеется ввиду, в серьезных проектах, игровых движках, например)? И этот вопрос самым опытным: как часто вы сами используете вышеперечисленные техники? Почему? Если вам не трудно, скажите, как практиковать эти вещи, чтобы они у меня в голове укрепились. Буду рад любым ответам, примерам использования и всей полезной инфе вообще! Спасибо. Добавлено через 8 минут Скажу сразу, читал много на стак оверфлоу, понял какую-то часть. Но все равно, хочу попрактиковать эти техники, чтобы в будущем не боялся их.
0
|
24.04.2016, 22:47 | |
Ответы с готовыми решениями:
6
Практика Практика практика Практика! |
Одессит
|
|
24.04.2016, 22:58 | 2 |
Понять зачем нужны наследования, указатели на базовый класс мне помогло изучение паттернов. Только лучше поискать примеры где не просто а+b. Я читал книгу Фримена по паттернам, она для джавы, но там код легко делается для с++ и примеры интересные.
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
|
24.04.2016, 23:26 | 3 |
на класс указатель создать невозможно, возможно на объект класса, зачем? затем зачем и указатели на другие типы, например аргумент в функцию
нет
виртуальная функция это такая функция которая будет реализована по разному у предка и у наследников например есть класс "Фигура" от неё наследуются классы " Прямоугольник", "Круг" и какие то еще. У всех есть метод "Рисовать" Реализуешь так чтобы у прямоугольника рисовался прямоугольник, у круга круг, ну и так далее
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 |
Хорошо, а почему бы тогда не создать отдельные классы под прямоугольник и круг, вместо того, чтобы их наследовать?
0
|
return (true);
1976 / 1111 / 221
Регистрация: 19.04.2011
Сообщений: 2,345
|
|
25.04.2016, 12:45 | 6 |
Потому-что они обладают общими свойствами, позволяющими выделить более крупный абстрактный объект, например координатами. Вот чтобы в каждом классе не повторять одни и те же свойства.
1
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
25.04.2016, 14:36 | 7 |
meJevin, ну, вы книжки по языку почитали, но чтобы понять для чего нужны классы и как ими пользоваться, вам нужно еще и книги по ООП обязательно почитать.
0
|
25.04.2016, 14:36 | |
25.04.2016, 14:36 | |
Помогаю со студенческими работами здесь
7
Практика Практика С++ Практика по с++ Практика на C++ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |