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

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

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

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

13.06.2010, 12:17. Просмотров 999. Ответов 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++ Абстрактный тип данных "СПИСОК"
C++ Реализовать абстрактный класс "Список" стеком/очередью
Вопрос про "Наследование" и "Объединение" C++
Вопрос "хорошего тона", "стиля" в программировании - правильное использование #include C++
Абстрактный базовый класс "звонок" с виртуальной функцией "стоимость" C++
Абстрактный класс "ряд" C++
C++ Опишите абстрактный базовый класс "строка",реализующий методы ввода-вывода строки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
ниначмуроФ
833 / 517 / 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++
Абстрактный тип данных "Собака" C++
Объяснить термин "абстрактный тип данных" C++
C++ Создать абстрактный класс "Треугольник" и производный - "Равнобедренный треугольник"
C++ Абстрактный клас "Полином"

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

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

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