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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
SphiNkSs
5 / 5 / 1
Регистрация: 28.03.2010
Сообщений: 143
#1

"Абстрактный" вопрос... - C++

13.06.2010, 12:17. Просмотров 1009. Ответов 6
Метки нет (Все метки)

Пипл объясните мне пожалуйста, если не трудно, зачем нужны абстрактные методы/классы???
Насколько я понял абстрактные классы это те куда входят абстрактные методы, а абстрактные методы это те которые имеют только имя и аргументы, но не имеют реализации. И только этим и отличаются от обычных методов/классов, но тогда какой в них смысл???

Пример с википедии:
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
#include <iostream>
 
class CA { // Абстрактный класс
  public:
    CA(void){ cout << "This object of the class "; }      
    virtual void Abstr(void) = 0; // Чистая (пустая) виртуальная функция.
    void fun(void){ cout << "Реализация не будет наследоваться!"; }
    ~CA(){ cout << "." << endl; } //Вызывается в обр. порядке конструкторов
  };
class CB: public CA {
  public:
    CB(void){ cout << "CB;"; }
    void Abstr(void){ cout << " call function cb.Abstr();"; } //Подменяющая функция.
    void fun(void){ cout << " call function cb.fun()"; }
    ~CB(){} // Неверно для абстр. кл. ~CC(){ ~CA(); } 
  };
class CC: public CA {
  public:
    CC(void){ cout << "CC;"; }
    void Abstr(void){ cout << " call function cc.Abstr();"; } //Подменяющая функция.
    void fun(void){ cout << " call function cc.fun()"; }
  ~CC(){} // Неверно для абстр. кл. ~CC(){ ~CA(); } 
  };
int main(){
  cout << "Program:" << endl;
  CB cb; cb.Abstr(); cb.fun(); cb.~CB();
  CC cc; cc.Abstr(); cc.fun(); cc.~CC();
  int i; cin >> i;
  }
ЗЫ Отвечаю на не заданный вопрос: в интернете читал, но не понял зачем они все таки нужны.
Объясните пожалуйста, своими словами...
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2010, 12:17     "Абстрактный" вопрос...
Посмотрите здесь:

Вопрос про "Наследование" и "Объединение" - C++
Доброго времени суток. Изучаю ООП, пока что не удачно. Появилось пару вопросиков. первый вид Animals // Млекопитающие class...

Создать абстрактный класс "Целое число" - C++
створити абстрактний клас ЦІЛЕ ЧИСЛО із чистим віртуальним методом переведення цілого з однієї системи числення в іншу. Створити похідні...

Объяснить термин "абстрактный тип данных" - C++
Почему именно он абстрактный? Не зависит от типа входных параметров, а еще от чего?

Абстрактный тип данных "СПИСОК" - C++
Помогите с лабораторной на С++, пожалуйста:wall: В расписании сохраняется информация о движении поездов по станции...

Абстрактный тип данных "Собака" - C++
Доброго времени суток. Я - студент политеха по специальности микроэлектроника и нанотехнологии. нам поставили программирование на с++, до...

Абстрактный клас "Полином" - C++
Помогите пожалуйста очень нужно до завтра сделать!!! создать абстрактный базовый класс Tfunction с виртуальными функциями equation()...

Абстрактный класс "ряд" - C++
Выдет следующие ошибки: undefined reference to `typeinfo for row' undefined reference to `vtable for row' на строчке: ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mexx-nikitin
78 / 78 / 3
Регистрация: 28.03.2010
Сообщений: 305
13.06.2010, 12:43     "Абстрактный" вопрос... #2
Абстра́ктный ме́тод в объектно-ориентированном программировании, метод класса, реализация для которого отсутствует.Класс, содержащий абстрактные методы, также принято называть абстрактным.Абстрактный класс в объектно-ориентированном программировании — класс, содержащий хотя бы один абстрактный метод .Реально заморощеное определение)))
SphiNkSs
5 / 5 / 1
Регистрация: 28.03.2010
Сообщений: 143
13.06.2010, 12:47  [ТС]     "Абстрактный" вопрос... #3
Да... Это я уже понял... Остается вопрос зачем они нужны??? Или по другому: область их применения какова???
mexx-nikitin
78 / 78 / 3
Регистрация: 28.03.2010
Сообщений: 305
13.06.2010, 12:49     "Абстрактный" вопрос... #4
Абстрактный класс можно использовать только как базовый для других классов.
SphiNkSs
5 / 5 / 1
Регистрация: 28.03.2010
Сообщений: 143
13.06.2010, 12:53  [ТС]     "Абстрактный" вопрос... #5
А смысл?!... Чтобы не забыть шаблон или как?... Зачем писать только имена методов, если в наследнике все равно писать реализации этих методов...
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
13.06.2010, 13:25     "Абстрактный" вопрос... #6
Абстрактные классы нужны для задания интерфейса без уточнения каких-либо конкретных деталей реализации.
Абстрактный класс - класс, специально определенный для обеспечения наследования характеристик порожденными классами.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2010, 13:55     "Абстрактный" вопрос...
Еще ссылки по теме:

Пишу игру "змейка". Есть вопрос по ней - C++
Я сейчас пишу игру &quot;змейка&quot;. (в консоли), но возникла одна проблема. Направление движения от пользователя я принимаю так: раз в секунду...

Проверка ответа пользователя на вопрос: "Продолжить программу или завершить?" - C++
Программа запросит следующие: Продолжить программу или завершить? Нужно нажать y для &quot;да&quot; или n для &quot;нет&quot;. Подскажите, как реализовать...

Вопрос к "бывалым" - C++
Есть задача - нужно создать программу обучения английскому языку. - На ней должна быть табличка,которую можно править и которая реагирует...

Подсчитать количество символов ".", "?", "!" - C++
#include &lt;iostream&gt; using namespace std; void main(){ char str; int i; cout&lt;&lt;&quot;vvedit text&quot;; cin &gt;&gt; str; for( i = 0; i &lt;str...

Несовместимые типы операндов ("HKL" и "int") - C++
GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(), NULL)) == 409) Выдает ошибку &quot;несовместимые типы операндов (&quot;HKL&quot; и...


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

Или воспользуйтесь поиском по форуму:
easybudda
Эксперт С++
9460 / 5473 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
13.06.2010, 13:55     "Абстрактный" вопрос... #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
SphiNkSs, классический пример из книжек по С++ - транспортное средство. У него есть абстрактный метод start_engine(), который должен бы приводить это транспортное средство в движение. И есть три производных класса - велосипед, автомобиль и самолёт. В реализации метода в первом случае надо одну ногу на педаль поставить, другой оттолкнуться, во втором случае повернуть ключ зажигания, переключить рычаг коробки на первую скорость и педальки одну нажать, другую отпустить, а в третьем случае всё ещё замороченнее - винт покрутить, тумблеров десятка два перещёлкнуть... А метод всё тот-же...
Yandex
Объявления
13.06.2010, 13:55     "Абстрактный" вопрос...
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru