Форум программистов, компьютерный форум, киберфорум
Наши страницы

абстрактный класс - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вывести порядковые номера слов в строке, совпадающих с введенным словом http://www.cyberforum.ru/cpp-beginners/thread227947.html
Подскажите пожалуйста и помогите в написание программы и вообще разобраться с заданием,а то честно читаю и не понять=)))Заранее благодарен!!! 1. Ввести строку и слово. Вывести порядковые номера...
C++ Переделать с файлами Подсчитать количество предложений в файле #include <stdio.h> #include <string.h> #include <conio.h> #include <iostream.h> #include<fstream.h> int main(void) { clrscr(); int nsent; http://www.cyberforum.ru/cpp-beginners/thread227941.html
C++ Программа с меню
Дана задача: "Парк авиакомпании «Выборгские авиалинии» состоит из одного самолёта с количеством мест 12. Он делает один рейс в день. Написать программу резервирования мест со следующими...
Кодировка русских букв в MacOS C++
здравствуйте, пишу программу на си под макосью, в качестве компилятора использую Xcode, возникает проблема с кодировкой русских букв. например, программа, выводящая ASCII-код символа при вводе...
C++ Массив C++ http://www.cyberforum.ru/cpp-beginners/thread227932.html
всем привет. помогите пожалуйста разобраться с 1-м нюансом. суть такова, что имеем массив, к примеру 5х5, в котором находим минимальное число. вопрос заключается в том, чтобы найти все...
C++ Составить программу, вычисляющую сумму ряда помогите плиз! ваще непойму чё да как подробнее

Показать сообщение отдельно
silent_1991
Эксперт С++
4986 / 3043 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
12.01.2011, 21:03
BTR, абстрактный класс - это класс, экземпляры которого не могут быть созданы. Самый распространённый пример - геометрические фигуры. Вы ведь не можете создать экземпляр типа "фигура". Это слишком абстрактно, не хватает конкретики. Однако от фигуры могут наследоваться конкретные формы - круг, квадрат, треугольник и т.д. Вот их экземпляры создать уже можно.
Везде пишут о чисто виртуальных функциях, потому что абстрактным может являться только класс, который содержит как минимум одну чисто виртуальную функцию (т.е. функцию, реализация которой в данном классе не предполагается, а предполагается в классах-наследниках). Приведу пример кода с той же фигурой:

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
#include <iostream>
 
class Shape
{
public:
    virtual double area() const = 0;
};
 
class Square: public Shape
{
public:
    Square(double a = 1): _a(a) { }
 
    virtual double area() const { return _a * _a; }
 
private:
    double _a;
};
 
class Circle: public Shape
{
public:
    Circle(double r = 1): _r(r) { }
 
    virtual double area() const { return 3.14159265358 * _r * _r; }
 
private:
    double _r;
};
 
int main()
{
    Shape *shapes[5];
 
    shapes[0] = new Circle (3);
    shapes[1] = new Square (2);
    shapes[2] = new Square (2.5);
    shapes[3] = new Circle (5);
    shapes[4] = new Circle (10);
 
    for (int i = 0; i < 5; ++i)
        std::cout << shapes[i]->area() << std::endl;
 
    for (int i = 0; i < 5; ++i)
        delete shapes[i];
 
    return 0;
}
Как видите, класс Shape - абстрактный, поскольку там объявлена чисто виртуальная функция area (мы ведь не можем вычислить площадь какой-то абстрактной фигуры...). Зато в классах, которые наследуют от Shape - Circle и Square функция area уже имеет определение. Затем, в главной функции, создаётся массив указателей на Shape (в отличие от экземпляров абстрактного класса, создавать указатели на него мы можем). Затем каждый указатель инициализируется конкретным объектом - кругом или квадратом (поскольку указатель на базовый класс является также указателем на любой производный класс). И затем, в цикле, не задумываясь, в какой ячейке массива какой объект находится, мы просто вызываем для каждого его метод area, а он для каждого объекта выполнит свои действия. Это очень удобно, когда заранее не известно, на какой объект будет указывать очередной указатель (скажем, пользователь сам выбирает, какую фигуру надо создать). Называется это поздним (или динамическим) связыванием.
31
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru