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

Привести пример, в котором реализуется динамический полиморфизм. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Работа с файлами http://www.cyberforum.ru/cpp-beginners/thread1210685.html
Добрый день. Готовлюсь к экзамену и не могу найти ответы на эти вопросы: 24. Функции ввода-вывода данных в файл по блокам. Пример использования. 25. Режимы доступа к данным в файле. Файлы с последовательным и произвольным доступом к данным. Функции, используемые для работы с файлами произвольного доступа. Пример использования.
C++ Нужен пример классов Привести пример классов с наследованием и доступом к компонентам их экземпляров через указатели на базовый и производный классы. http://www.cyberforum.ru/cpp-beginners/thread1210669.html
C++ Функция в качестве параметра
Я не знаю, как передать функцию в качестве параметра. При обработке программа никаких ошибок не выдает, но результат печатает неверный. #include <iostream> #include <Windows.h> #include <locale.h> #include <math.h> using namespace std; void func(int); typedef double(*Pfun)(double y1, int pp);
C++ Циклические алгоритмы,Начав тренироваться, лыжник в первый день пробежал n км. Каждый следующий день он увелич
Начав тренироваться, лыжник в первый день пробежал n км. Каждый следующий день он увеличивал пробег на 10% от пробега предыдущего дня. В какой день суммарный пробег за все дни превысит M км. (циклические алгоритмы)
C++ Возведение в вещественную степень http://www.cyberforum.ru/cpp-beginners/thread1210638.html
Здравствуйте, требуется ваша помощь. У меня дано float a,x,n, вычислить a^x с точностью eps=10^(-n) и можно пользоваться только +,-,*,/. Подскажите пожалуйста) Заранее спасибо.
C++ Паралельное вычисление минимального значения двух массивов Выполнить паралельное вычисление минимального значения для двух массивов. Вывести результат через MessageBox/. Добавлено через 29 минут Выполнить паралельное вычисление минимального значения для двух массивов подробнее

Показать сообщение отдельно
BlackSpace
136 / 129 / 51
Регистрация: 15.03.2014
Сообщений: 274
17.06.2014, 21:25     Привести пример, в котором реализуется динамический полиморфизм.
Lavin, пример с полиморфизмом.
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include <cmath>
#include <iostream>
 
using namespace std;
 
// базовый класс фигура
class Shape {
 
protected:
    double area;
 
public:
 
    // чистая виртуальная функция - вычисление площади
    virtual double GetArea() = 0;
 
    // виртуальный деструктор
    virtual ~Shape() {
        cout << "Shape destructor" << endl;
    }
};
 
// класс треугольник
class Triangle: public Shape {
 
private:
    // стороны треугольника
    double a;
    double b;
    double c;
 
    // метод вычисляет площадь треугольника
    void CalcArea(){
        double p = ( a + b + c ) / 2.0;
        area = sqrt( p * ( p - a ) * ( p - b ) * ( p - c ) );
    }
 
public:
    // конструктор с тремя параметрами - стороны треугольника
    // для упрощения нет проверки на возможность существования треугольника с такими сторонами
    Triangle( double _a, double _b, double _c ) :
            a( _a ), b( _b ), c( _c ) {
        CalcArea();
    }
 
    // метод возвращает площадь треугольника
    double GetArea() {
        return area;
    }
 
    // деструктор
    ~Triangle() {
        cout << "Triangle destructor" << endl;
    }
};
 
// класс круг
class Circle: public Shape {
 
private:
    double r;
 
    // метод вычисляет площадь круга
    void CalcArea(){
        area = M_PI * r * r;
    }
 
public:
    // конструктор с одним параметром - радиус окружности
    // опять же для упрощения - отсутсвует проверка возможности существования круга с указанным радиусом
    Circle( double _r ) :
            r( _r ) {
        CalcArea();
    }
 
    // площадь круга
    double GetArea() {
        return area;
    }
 
    // деструктор
    ~Circle() {
        cout << "Circle destructor" << endl;
    }
};
 
int main() {
 
    Shape* arr[ 3 ]; // массив указателей на объекты базового класса
 
    // но в данном массиве мы можем хранить объекты классов наследников
    // используем механизм позднего связывания
 
    arr[ 0 ] = new Triangle( 3, 4, 5 );
    cout << arr[ 0 ]->GetArea() << endl; // покажем площадь треугольника
 
    arr[ 1 ] = new Circle( 10.5 );
    cout << arr[ 1 ]->GetArea() << endl; // покажем площадь круга
 
    arr[ 2 ] = new Triangle( 3, 5, 7.5 );
    cout << arr[ 2 ]->GetArea() << endl; // покажем площадь треугольника
 
    for ( int i = 0; i < 3; ++i )
        delete arr[ i ]; // удаляем созданные объекты
 
    return 0;
}
Согласен с 0x10 - материал по учебникам изучать необходимо для решения возникающих задач.
 
Текущее время: 16:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru