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

а разве наследование такая уж важная возможность? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Считывание всего файла http://www.cyberforum.ru/cpp-beginners/thread153050.html
Люди подскажите плиз как можно считать весь файл с текстом в массив?
C++ Потоки. Можете сказать что такое потоки и привести примеры на C++. P.S не надо давать ссылку на википедию. http://www.cyberforum.ru/cpp-beginners/thread153048.html
Старший бит C++
Допустим число 4 представляю в двоичной системе счисления получается 0100. В етом двоичном числе старший бит ет 3 бит?
C++ Найти в текстовом файле строки по условию
Задача была написать программу. В заданном текстовом файле найти: самую длинную строку. все строки начинающиеся с символа А. все строки, в которых имеется более трех пробелов. Написал) Без проблем, но что-то кажется что я написал говно-код... Параметры написания. Нету волшебных чисел, кроме размера одного буфера. Все через динамические массивы. Сам массив строк двумерный динамический. На...
C++ Новый диалог не слушается http://www.cyberforum.ru/cpp-beginners/thread152995.html
такая проблема, добавляю к проекту новый диалог IDD_DIALOG2, на основой вешаю кнопку и для неё обрабочик void CTestDialog::OnButton1() { // TODO: Add your control notification handler code here CDialog dlg(IDD_DIALOG2); dlg.DoModal(); } на второй диалог добавляю какой-нить контрол и.. и ничего, ничего не работает, кроме кнопок ok и cancel, нет я конечно умею кнопки запрограммировать на...
C++ определить достижимость графа определить достижимость графа(относительно каждой вершины) плизззз кто сможет написать программу на С подробнее

Показать сообщение отдельно
NightmareZ
1339 / 562 / 37
Регистрация: 31.03.2009
Сообщений: 1,918
11.07.2010, 15:28     а разве наследование такая уж важная возможность?
Цитата Сообщение от nikkka Посмотреть сообщение
fasked, ну, если понадобилось улучшить класс, оставлая старый, то наследование "полезно". но разве это нужно так часто что для этого создали специалный раздел?
вы не беситесь))) вопроссы тупые, знаю. но ведь я только начинющий, и с наследованием пока работал недастаточно.
Добавь к наследованию полиморфизм и получишь больше пользы.
Самый простой пример.

Например, пишешь ты игру. В игре у тебя есть куча всяких разных объектов: объекты-монстры класса Monster, объекты-препятствия класса Wall, объект-игрок класса Gamer, объекты-фоновые картинки класса BackgroundPicture и так далее.

Что у них общего? Общее у них то, что они должны быть отрисованы на экране, а значит, у них должна быть функция-член (метод) Draw. Но у каждого класса функция разная (а иногда очень разная).

Как поступить? Создаём базовый класс Entity с чисто виртуальной (абстрактной) функцией Draw, а все вышеперечисленные классы наследуем от Entity и функцию Draw перегружаем (переопределяем).

Для чего? Все наши объекты хранятся в массиве в виде указателя. Но не простого указателя, а указателя на базовый класс (Entity *). Когда идёт отрисовка уровня, проходим по всем элементам этого массива и вызываем метод Draw, но так как реально там лежает не объекты класса Entity, а его наследники, то для каждого из них будет вызван подходящий Draw.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
class Entity
{
  virtual void Draw() = 0;
};
 
class Monster
{
  void Draw()
  {
    // тут код для отрисовки монстра
  }
};
 
class Wall
{
  void Draw()
  {
    // тут код для отрисовки препятствия
  }
};
 
class Gamer
{
  void Draw()
  {
    // тут код для отрисовки игрока
  }
};
 
class BackgroundPicture
{
  void Draw()
  {
    // тут код для отрисовки фоновой картинки
  }
};
 
// .......
 
// массив, в котором хранятся все объекты
Entity* array[];
 
// .......
 
// функция, рисующая уровень
void DrawLevel()
{
  for (int i = 0; i < arrayLenght; i++)
    array[i]->Draw(); // тут будет вызываться нужный Draw в зависимости от типа объекта
}
Если бы небыло наследования и полиморфизма, нам бы пришлось писать гораздо больше кода и он бы был гораздо более запутанным.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru