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

виртуальные функции - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Определение максимального значения http://www.cyberforum.ru/cpp-beginners/thread271906.html
Здравствуйте! Подскажите начинающему, как можно определить максимальное значение нескольких чисел, что бы не играться с условной инструкцией. Нашел оператор max, но он работает только с 2 числами. cin >>a>>b>>c>>d; result=max (a,b,c,d); /*не работает*/ Спасибо!
C++ Посмотрите код Помогите разобраться, пишу программу на С++. Вот код: app.cpp #include <SDL/SDL.h> #include "App.h" #include "Log.h" #include "Config.h" CApp::CApp() { http://www.cyberforum.ru/cpp-beginners/thread271894.html
Потоки C++
Помогите,пожалуйста!Написать программу, которая считывает текст из файла и выводит на экран только предложения, начинающиеся с тире, перед которым могут находиться только пробельные символы.(С++).
Очередь C++
Всем приветики! Если кто нибудь знает помогите пожалуйста вот с такой задачкой. Есть какая-то очередь с элементами, нужно найти все нечетные и добавить в конец. Я вообще не знаю даже с чего начать
C++ Элементы http://www.cyberforum.ru/cpp-beginners/thread271861.html
Помогите перевести код программы к старому образцу ну для c++ 3.1 #include <queue> void main( void ) { std::queue<int> q, tmp; for ( int i = 1; i <= 10; i++ ) q.push( i ); // заполняем числами
C++ Реализовать программу, решающую СЛАУ методом Гаусса Реализовать программу, решающую СЛАУ методом Гаусса. Требования: 1. Программа должна выдавать решение для СЛАУ, имеющих единственное решение. 2. Программа должна работать со СЛАУ, имеющими произвольную размерность. 3. Квадратную матрицу и столбец свободных членов программа должна загружать из текстового файла. 4. После вычисления решения необходимо оценить погрешность решения СЛАУ A*x=b:... подробнее

Показать сообщение отдельно
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
08.04.2011, 23:00     виртуальные функции
Фух... Код получился больше, чем я предполагал, но он показывает всю мощь динамического связывания и виртуальных функций. Здесь пользователь самостоятельно может задавать последовательность и количество задаваемых фигур, на этапе компиляции неизвестно, в какой ячейке массива shapes какая фигура лежит. Обратите внимание на строку std::cout << shapes[i]->area() << std::endl;. Весь остальной код, по сути, только для красоты, и вся суть в этой строке. Она означает, что, даже не зная на этапе компиляции, какая фигура где находится, мы можем для любой фигуры использовать просто вызов функции area, и автоматически будет вызвана своя функция для каждой фигуры. Полагаю, возникнут вопросы, если так, обращайтесь - растолкую, что не понятно.
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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
#include <iostream>
#include <cmath>
#include <vector>
 
//-----------------------------------------------------------------------------
 
class Shape
{
public:
    virtual double area() const = 0;
};
 
class Square: public Shape
{
public:
    Square(double size = 1.0):
    _side(size)
    {
    }
 
    virtual double area() const
    {
        return _side * _side;
    }
 
private:
    double _side;
};
 
//-----------------------------------------------------------------------------
 
class Triangle: public Shape
{
public:
    Triangle(double side_a = 3.0, double side_b = 4.0, double side_c = 5.0):
    _side_a(side_a),
    _side_b(side_b),
    _side_c(side_c)
    {
    }
 
    virtual double area() const
    {
        double p = (_side_a + _side_b + _side_c) / 2.0;
 
        return sqrt(p * (p - _side_a) * (p - _side_b) * (p - _side_c));
    }
 
private:
    double _side_a;
    double _side_b;
    double _side_c;
};
 
//-----------------------------------------------------------------------------
 
class Circle: public Shape
{
    static const double Pi;
 
public:
    Circle(double radius = 1.0):
    _radius(radius)
    {
    }
 
    virtual double area() const
    {
        return Pi * _radius * _radius;
    }
 
private:
    double _radius;
};
 
const double Circle::Pi = 3.14159265358979323;
 
//-----------------------------------------------------------------------------
 
int main()
{
    setlocale(LC_ALL, "Rus");
 
    std::vector< Shape * > shapes;
    size_t choise;
 
    do
    {
        std::cout << "Меню" << std::endl
                  << "1. Создать квадрат" << std::endl
                  << "2. Создать треугольник" << std::endl
                  << "3. Создать круг" << std::endl
                  << "4. Рассчитать площади созданных фигур и выйти" << std::endl;
        std::cin >> choise;
 
        switch (choise)
        {
        case 1:
            {
                double side;
 
                std::cout << "Квадрат:" << std::endl;
                std::cout << "Введите длину стороны: ";
                std::cin >> side;
 
                shapes.push_back(new Square (side));
 
                break;
            }
 
        case 2:
            {
                double side_a, side_b, side_c;
 
                std::cout << "Треугольник:" << std::endl;
                std::cout << "Введите длину стороны a: ";
                std::cin >> side_a;
                std::cout << "Введите длину стороны b: ";
                std::cin >> side_b;
                std::cout << "Введите длину стороны c: ";
                std::cin >> side_c;
 
                shapes.push_back(new Triangle (side_a, side_b, side_c));
 
                break;
            }
 
        case 3:
            {
                double radius;
 
                std::cout << "Круг:" << std::endl;
                std::cout << "Введите длину радиуса: ";
                std::cin >> radius;
 
                shapes.push_back(new Circle (radius));
 
                break;
            }
 
        case 4:
            {
                Square *square_pointer;
                Triangle *triangle_pointer;
                Circle *circle_pointer;
                size_t size = shapes.size();
 
                for (size_t i = 0; i < size; ++i)
                {
                    square_pointer = dynamic_cast< Square * >(shapes[i]);
                    triangle_pointer = dynamic_cast< Triangle * >(shapes[i]);
                    circle_pointer = dynamic_cast< Circle * >(shapes[i]);
 
                    if (square_pointer != 0)
                        std::cout << "Квадрат.     Площадь = ";
 
                    if (triangle_pointer != 0)
                        std::cout << "Треугольник. Площадь = ";
 
                    if (circle_pointer != 0)
                        std::cout << "Круг.        Площадь = ";
 
                    std::cout << shapes[i]->area() << std::endl;
                }
 
                break;
            }
 
        default:
            {
                std::cout << "Недопустимое действие! Попробуйте снова." << std::endl;
 
                break;
            }
        };
    }
    while (choise != 4);
 
    size_t size = shapes.size();
 
    for (size_t i = 0; i < size; ++i)
        delete shapes[i];
 
    return 0;
}
 
Текущее время: 10:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru