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

Как выбрать класс из консольного меню? - C++

Восстановить пароль Регистрация
 
xlxndr
 Аватар для xlxndr
56 / 8 / 3
Регистрация: 14.06.2013
Сообщений: 115
01.01.2016, 20:38     Как выбрать класс из консольного меню? #1
Есть классы графических фигур, описание их - в соответствующих файлах. Для всех них есть метод рисования Draw(), выполненный на основе библиотеки BGI grahpics.h;

Делаю программу так, чтобы выбирался массив экземпляров класса путем ввода с клавиатуры. В дальнейшем будет идти обработка данных в зависимости от введенного класса. Требуется сократить программу и не делать всех вариантов обработки данных для каждого класса (например, с помощью switch()... case '...' ), что необходимо, например, если таких классов много и для каждого класса тоже могут быть варианты операций типа switch()... case '...' .

Пробую делать так:
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
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <graphics.h>
#include <math.h>
using namespace std;
 
#include "header.h"
 
const int N=100, 
          MaxX=800, 
          MaxY=600;
 
void MakeClassDraw(int n, TPoint* TClass)
{
    for(int i=0;i<n;i++)    
    (TClass+i) -> Draw();
}
    
int main(int argc, char* argv[])
{
    setlocale(LC_ALL,".1251");
    srand(time(NULL));
    
    TPoint     P[N];
    TLine      L[N]; 
    TCircle    C[N]; 
    TEllipse   E[N];
    TTriangle  T[N];
    TRectangle R[N];
    char      a;    
    TPoint*   ClassLink; 
    
    cout<<"Введите:\n1 - ТочкаГ*,\n2 - Линия,\n3 - Окружность,\n4 - Эллипс,\n5 - Прямоугольник,\n6 - Прямоугольник.\n";
    cin>>a; cin.get();
    
    initwindow(MaxX,MaxY);
    
    switch (a) 
    {
           case '1': ClassLink = P; break;
           case '2': ClassLink = L; break;
           case '3': ClassLink = C; break;
           case '4': ClassLink = E; break;
           case '5': ClassLink = T; break;
           case '6': ClassLink = R; break;
           default: cout << "\nВведено не корректное значение.\n";
    }
    
    initwindow(MaxX,MaxY);
    
    MakeClassDraw(N,ClassLink);
 
    getch();
    return 0;
}
Программа вроде компиллируется, рисует 2 фигуры из 100 (2 точки, 2 треугольника или др. фигуры), а затем зависает... Видимо что-то не правильно в коде... (сделано в Dev-Cpp).

Итак, еще раз, вопросы:
1) Как выбрать класс из меню, присвоить его "идентификатор" какой-то переменно (какой?) и потом работать с этой абстрактной переменной, а не с экземпляром конкретного класса???

2) Можно ли как-то ввести этот "идентификатор" экземпляра класса с клавиатуры а не с помощью switch()... case'...', как сделано у меня... поскольку, в указатель не получается ввести значение?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.01.2016, 20:38     Как выбрать класс из консольного меню?
Посмотрите здесь:

C++ Как изменить заголовок консольного окна
Создание консольного меню C++
Простенькое графическое меню для консольного приложения DOS C++
Класс меню! C++
Выбрать название динамической структуры (назвать класс) C++
C++ Как сменить значок консольного приложения
Как отличается оконное от консольного программирования? C++
C++ Разработать класс "Информация о поездах" с функционалом для консольного и файлового ввода/вывода результатов

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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