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

Абстрактные базовые классы - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.83
Малиновая тень
4 / 4 / 0
Регистрация: 07.12.2010
Сообщений: 19
06.12.2011, 09:38     Абстрактные базовые классы #1
Помогите решить пожалуйста!)
Задание 1 .
Создать базовый класс - фигура, и производные класс - круг, прямоугольник, трапеция. Определить виртуальные функции площадь, периметр и вывод на печать.
Задание 2 .
Создать абстрактный базовый класс с виртуальной функцией - сумма прогрессии. Создать производные классы: арифметическая прогрессия и геометрическая прогрессия. Каждый класс имеет два поля типа double. Первое - первый член прогрессии, второе (double) - постоянная разность (для арифметической) и постоянное отношение (для геометрической). Определить функцию вычисления суммы, где параметром является количество элементов прогрессии.
Арифметическая прогрессия aj=a0+jd, j=0,1,2,…
Сумма арифметической прогрессии: sn=(n+1)(a0+an)/2
Геометрическая прогрессия: aj=a0rj, j=0,1,2,…
Сумма геометрической прогрессии: sn=(a0-anr)/(1-r)
Задание 3.
Создать класс - данные - абстрактный базовый класс. Создать производные классы - данные типа сигнал, данные типа результат обработки и вспомогательные данные. Все данные имеют функции отображения, сохранения и обработки.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2011, 09:38     Абстрактные базовые классы
Посмотрите здесь:

C++ абстрактные классы
C++ Абстрактные классы
Абстрактные классы C++
C++ Абстрактные классы
C++ Виртуальные абстрактные базовые классы
C++ Абстрактные классы
C++ Абстрактные классы
абстрактные классы C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
06.12.2011, 16:43     Абстрактные базовые классы #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
1.
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#include <iostream>
#include <cmath>
 
//-----------------------------------------------------------------------------
 
class Figure
{
public:
    virtual double area() const = 0;
    virtual double perimeter() const = 0;
 
    virtual void print() const
    {
        std::cout << "area = " << area() << "; perimeter = " << perimeter() << std::endl;
    }
};
 
//-----------------------------------------------------------------------------
 
class Circle : public Figure
{
public:
    Circle(double radius):
    m_radius(radius)
    {
    }
 
    virtual double area() const
    {
        return pi * m_radius * m_radius;
    }
 
    virtual double perimeter() const
    {
        return 2.0 * pi * m_radius;
    }
 
    virtual void print() const
    {
        std::cout << "Circle: ";
 
        Figure::print();
    }
 
private:
    static const double pi;
 
private:
    double m_radius;
};
 
const double Circle::pi = 3.14159265358979323;
 
//-----------------------------------------------------------------------------
 
class Rectangle : public Figure
{
public:
    Rectangle(double width, double height):
    m_width(width),
    m_height(height)
    {
    }
 
    virtual double area() const
    {
        return m_width * m_height;
    }
 
    virtual double perimeter() const
    {
        return 2.0 * m_width + 2.0 * m_height;
    }
 
    virtual void print() const
    {
        std::cout << "Rectangle: ";
 
        Figure::print();
    }
 
private:
    double m_width;
    double m_height;
};
 
//-----------------------------------------------------------------------------
 
class Trapezoid : public Figure
{
public:
    Trapezoid(double base1, double base2, double side1, double side2):
    m_base1(base1),
    m_base2(base2),
    m_side1(side1),
    m_side2(side2)
    {
    }
 
    virtual double area() const
    {
        return sqrt(pow(m_side1, 2.0) - pow((pow(m_base2 - m_base1, 2.0) + pow(m_side1, 2.0) - pow(m_side2, 2.0)) / (2.0 * (m_base2 - m_base1)), 2.0)) * (m_base1 + m_base2) / 2.0;
    }
 
    virtual double perimeter() const
    {
        return m_base1 + m_base2 + m_side1 + m_side2;
    }
 
    virtual void print() const
    {
        std::cout << "Trapezoid: ";
 
        Figure::print();
    }
 
private:
    double m_base1;
    double m_base2;
    double m_side1;
    double m_side2;
};
 
//-----------------------------------------------------------------------------
 
void figure_info(const Figure &figure)
{
    figure.print();
}
 
int main()
{
    Circle c(2.0);
    Rectangle r(2.0, 3.0);
    Trapezoid t(3.0, 6.0, 3.0, sqrt(18.0));
 
    figure_info(c);
    figure_info(r);
    figure_info(t);
 
    return 0;
}
Добавлено через 13 минут
2.
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
#include <iostream>
#include <cmath>
 
//-----------------------------------------------------------------------------
 
class Progression
{
public:
    virtual double amount(size_t number) const = 0;
};
 
//-----------------------------------------------------------------------------
 
class ArithmeticalProgression : public Progression
{
public:
    ArithmeticalProgression(double start, double d):
    m_start(start),
    m_d(d)
    {
    }
 
    virtual double amount(size_t number) const
    {
        return number * (2.0 * m_start + m_d * (number - 1.0)) / 2.0;
    }
 
private:
    double m_start;
    double m_d;
};
 
//-----------------------------------------------------------------------------
 
class GeometricalProgression : public Progression
{
public:
    GeometricalProgression(double start, double q):
    m_start(start),
    m_q(q)
    {
    }
 
    virtual double amount(size_t number) const
    {
        return (m_q == 1) ? (number * m_start) : (m_start * (1.0 - pow(m_q, static_cast<double>(number))) / (1.0 - m_q));
    }
 
private:
    double m_start;
    double m_q;
};
 
//-----------------------------------------------------------------------------
 
void print_amount(const Progression &progression, size_t number)
{
    std::cout<< progression.amount(number) << std::endl;
}
 
int main()
{
    ArithmeticalProgression ap(0.0, 3.0);
    GeometricalProgression gp(1.0, 0.5);
 
    print_amount(ap, 10);
    print_amount(gp, 5);
 
    return 0;
}
Добавлено через 24 секунды
3 вы уж как-нибудь сами.
Малиновая тень
4 / 4 / 0
Регистрация: 07.12.2010
Сообщений: 19
06.12.2011, 18:30  [ТС]     Абстрактные базовые классы #3
silent_1991 , спасибо вам большое)
Yandex
Объявления
06.12.2011, 18:30     Абстрактные базовые классы
Ответ Создать тему
Опции темы

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