Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
b0n4b
3 / 3 / 2
Регистрация: 16.11.2011
Сообщений: 100
1

Шаблон класса.

05.04.2012, 01:46. Просмотров 679. Ответов 6
Метки нет (Все метки)

Приведите пожалуйста пример какого нибудь простого класса с меню. Чтобы пользователь сам вводил, а не компьютер заполнял.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2012, 01:46
Ответы с готовыми решениями:

Шаблон родительского класса и шаблон класса потомка
Запутался, как правильно пронаследоваться от шаблона класса? #include...

Шаблоны функций, Ошибка: для использования класса шаблон требуется список аргументов шаблон
Есть у меня 3 структуры Трамвай , Троллейбус , Автобус. Для автобуса определены...

Шаблон класса, параметром которого должны являться наследники определённого класса
Сразу извиняюсь за нубский вопрос. Суть в том, что я хочу сделать шаблон...

Шаблон класса (параметризация класса)
Нужна помощь и советы!!! Англо-русский словарь построен как список. Каждая...

Создать шаблон некоторого класса, возможно, реализованного с применением некоторого серверного класса
Добрый день, Уважаемые профессионалы. Прошу помочь в решении задачи. ...

6
Avazart
Эксперт С++
7722 / 5631 / 549
Регистрация: 10.12.2010
Сообщений: 25,397
Записей в блоге: 17
05.04.2012, 04:48 2
Меню чего?
1.- Меню в консоли.
2.- Меню в оконном приложении.
3.- ...
0
b0n4b
3 / 3 / 2
Регистрация: 16.11.2011
Сообщений: 100
05.04.2012, 10:19  [ТС] 3
Avazart, в консоли. Дело в том, что я не совсем понимаю как устроен класс.
В большей мере мне не понятно как вызвать какую либо функцию командой (не знаю, правильно ли я это называю или нет)
Вот у меня задание реализовать класс очереди через массив. Операции над очередями я уже сделал, но не знаю как вызвать нужное действие командой.
0
ForEveR
В астрале
Эксперт С++
7995 / 4754 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
05.04.2012, 10:44 4
b0n4b, Ну вы должны задать соответствие между коммандой и вызовом функции. Можно сделать через if/else. Можно сделать через мапу.
0
b0n4b
3 / 3 / 2
Регистрация: 16.11.2011
Сообщений: 100
05.04.2012, 10:50  [ТС] 5
ForEveR, через if я написал, для того проверить корректно ли работают разные команды. Но мне нужен именно класс, ноя не знаю как его реализовать. Смотрел темы на форуме, но толком ничего не понял.
0
ForEveR
В астрале
Эксперт С++
7995 / 4754 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
05.04.2012, 11:18 6
b0n4b, Обычный любой класс, какой вам захочется... Что сложного-то? оО

Добавлено через 12 минут
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
#include <iostream>
#include <map>
#include <functional>
#include <string>
 
class SimpleCalc
{
public:
   SimpleCalc(const int first, const int second):
      first_arg(first), second_arg(second)
   {
   }
 
   int apply(const std::string& command) const
   {
      return functions[command](this);
   }
 
   int add() const
   {
      return first_arg + second_arg;
   }
 
   int minus() const
   {
      return first_arg - second_arg;
   }
 
   typedef std::function<int(const SimpleCalc*)> calc_function;
private:
   static std::map<std::string, calc_function> functions;
   int first_arg;
   int second_arg;
};
 
std::map<std::string, SimpleCalc::calc_function> SimpleCalc::functions = 
{
   std::make_pair("plus", &SimpleCalc::add),
   std::make_pair("minus", &SimpleCalc::minus)
};
 
int main()
{
   SimpleCalc calc(1, 1);
   std::string command;
   while (command != "quit")
   {
      std::cout << "plus for addition" << std::endl;
      std::cout << "minus for minus" << std::endl;
      std::cout << "quit for exit" << std::endl;
      std::cout << "Input command" << std::endl;
      std::getline(std::cin, command);
      if (command != "quit")
      {
         std::cout << calc.apply(command) << std::endl;
      }
   }
}
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
forever@pterois:~/My_pro1/cpp_pro$ g++ -o new new.cpp -std=c++0x
forever@pterois:~/My_pro1/cpp_pro$ ./new 
plus for addition
minus for minus
quit for exit
Input command
plus
2
plus for addition
minus for minus
quit for exit
Input command
minus
0
plus for addition
minus for minus
quit for exit
Input command
quit
1
Avazart
Эксперт С++
7722 / 5631 / 549
Регистрация: 10.12.2010
Сообщений: 25,397
Записей в блоге: 17
05.04.2012, 16:15 7
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
//-----------------------------------------------------------------------------
namespace my
{
struct console_menu
{
  console_menu* parent;
  std::string name;
  std::vector<console_menu*> items;
  //---------------------------------
  console_menu(std::string name,console_menu* parent=NULL)
    {
    this->name=name;
    this->parent=parent;
    }
  //---------------------------------
  ~console_menu()
    {
    std::cout<<"destroy  "<<name<<std::endl;
    for(unsigned i=0;i<items.size();i++)
       if(items[i]) delete items[i];
    }
  //---------------------------------
  console_menu* add_item(std::string item_name)
   {
   console_menu* new_item= new console_menu(item_name,this);
   items.push_back(new_item);
   return  new_item;
   }
  //---------------------------------
  void show()
   {
    for(unsigned i=0;i<items.size();i++)   std::cout<<items[i]->name<<std::endl;
   }
 //---------------------------------
  std::string path()
   {
   std::string s=name;
   console_menu* pos=parent;
   for(;pos;) { s.insert(0,pos->name+"\/"); pos=pos->parent;}
   return s;
   }
};
};
//---------------------------------------------------------------------------
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
using namespace std;
using namespace my;
//-------------------------------------------------
int _tmain(int argc, _TCHAR* argv[])
{
 console_menu* main_menu= new console_menu("main_menu");
 
 main_menu->add_item("0. item0");
 main_menu->add_item("1. item1");
 main_menu->add_item("2. item2");
 main_menu->add_item("3. item3");
 
 main_menu->items[1]->add_item("0 sub item 1.1");
 
    main_menu->items[1]->items[0]->add_item("0 sub sub item 1.1.1");
 
 main_menu->items[1]->add_item("1 subitem 1.2");
 
 console_menu* current_menu;
 
 current_menu= main_menu;
 cout<<"\/"<<current_menu->path()<<endl;
 current_menu->show();
 
 char key;
 unsigned index;
 string str;
 
 for(;;)
   {
    cin>>str;
    key=str[0];
 
    if(isdigit(key))
     {
     index= atoi(str.c_str());
 
     if(index<current_menu->items.size())
        {
        current_menu= current_menu->items[index];
        cout<<"\/"<<current_menu->path()<<endl;
        current_menu->show();
        }
     else cerr<<"error"<<endl;
     }
    else
     if(str=="exit"||str=="quit")  break;
     else
          if(str=="back" && current_menu->parent)
            {
            current_menu= current_menu->parent;
            cout<<current_menu->path()<<endl;
            current_menu->show();
            }
   }
delete  main_menu;
system("pause");
}
1
Миниатюры
Шаблон класса.  
05.04.2012, 16:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2012, 16:15

шаблон класса
компилятор с линковщиком выдают такие ошибки 1&gt;main.obj : error LNK2019:...

Шаблон класса с++
StakNode.h #ifndef _STACKNODE_H_ #define _STACKNODE_H_ #include &lt;string&gt; ...

шаблон класса
Спроектировать шаблон класса. В основной программе создать соответствующие...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru