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

абстрактный класс - 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. Он делает один рейс в день. Написать программу резервирования мест со следующими характеристиками: а. Программа использует массив из 12 структур. Каждая структура должна содержать номер сиденья (идентификатор места), маркер, указывающий зарезервировано ли место, фамилию пассажира и его имя....
кодировка русских букв в MAC OS C++
здравствуйте, пишу программу на си под макосью, в качестве компилятора использую Xcode, возникает проблема с кодировкой русских букв. например, программа, выводящая ASCII-код символа при вводе русской буквы выводит отрицательный результат, при этом при вводе с клавиатуры выдаётся другой результат, нежели при чтении из файла как заставить компилятор адекватно воспринимать русские буквы ?
C++ Массив C++ http://www.cyberforum.ru/cpp-beginners/thread227932.html
всем привет. помогите пожалуйста разобраться с 1-м нюансом. суть такова, что имеем массив, к примеру 5х5, в котором находим минимальное число. вопрос заключается в том, чтобы найти все минимальные элементы по очереди. т.е. находим 1-е, выписываем, в следующем поиске оно не участвует, ищем 2-е и так далее. была идея организовать таким образом что, после нахождения минимального заменяем...
C++ Составить программу, вычисляющую сумму ряда помогите плиз! ваще непойму чё да как подробнее

Показать сообщение отдельно
zybrzybr
17 / 16 / 0
Регистрация: 29.09.2010
Сообщений: 156
29.07.2013, 04:08     абстрактный класс
Цитата Сообщение от silent_1991 Посмотреть сообщение
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, а он для каждого объекта выполнит свои действия. Это очень удобно, когда заранее не известно, на какой объект будет указывать очередной указатель (скажем, пользователь сам выбирает, какую фигуру надо создать). Называется это поздним (или динамическим) связыванием.
а если не обьявлять эту "чистую" функцию? т.е. оставить ее виртуальной и все. Разве что то поменяеться в программе? (только наткнулся на эти абстрактные классы..)
т.е. я хочу спросить что что допролнительного дает абстрактный класс относительно обычного с виртуальными методами?
 
Текущее время: 17:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru