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

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

Восстановить пароль Регистрация
 
Lavin
0 / 0 / 0
Регистрация: 25.10.2013
Сообщений: 16
17.06.2014, 19:24     Привести пример, в котором реализуется динамический полиморфизм. #1
Привести пример, в котором реализуется динамический полиморфизм.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2014, 19:24     Привести пример, в котором реализуется динамический полиморфизм.
Посмотрите здесь:

C++ Полиморфизм. Пример.
C++ Нужно привести пример программы тестирования
C++ можете привести пример программы со структурой данных, и объяснить как она работает
Привести пример обработки и преобразования матриц, используя динамическое выделение памяти C++
Как правильно записывать в динамический массив типа класса обьекты? вот банальный пример C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11825 / 6804 / 769
Регистрация: 27.09.2012
Сообщений: 16,871
Записей в блоге: 2
Завершенные тесты: 1
17.06.2014, 19:35     Привести пример, в котором реализуется динамический полиморфизм. #2
C++
1
2
3
4
struct X
{
   virtual ~X() {};
} ;
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
17.06.2014, 19:38     Привести пример, в котором реализуется динамический полиморфизм. #3
Все темы одного и того же автора, а попыток заглянуть в учебник, судя по всему, и не было.
Пример кода класса
Пример класса с конструктором и деструктором, создание экземпляра класса через конструктор с параметрами
Пример класса со статическим членом
Хедин
17.06.2014, 20:19
  #4

Не по теме:

0x10, смотреть в учебник это для слабаков куда солиднее создавать темы на форуме

BlackSpace
135 / 128 / 50
Регистрация: 15.03.2014
Сообщений: 275
17.06.2014, 21:25     Привести пример, в котором реализуется динамический полиморфизм. #5
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 - материал по учебникам изучать необходимо для решения возникающих задач.
Yandex
Объявления
17.06.2014, 21:25     Привести пример, в котором реализуется динамический полиморфизм.
Ответ Создать тему
Опции темы

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