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

Шаблон класса. - C++

Восстановить пароль Регистрация
 
b0n4b
2 / 2 / 0
Регистрация: 16.11.2011
Сообщений: 100
05.04.2012, 01:46     Шаблон класса. #1
Приведите пожалуйста пример какого нибудь простого класса с меню. Чтобы пользователь сам вводил, а не компьютер заполнял.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2012, 01:46     Шаблон класса.
Посмотрите здесь:

Шаблон класса C++
Шаблон класса (параметризация класса) C++
Шаблон класса C++
C++ Шаблон класса
C++ шаблон класса
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,578
Записей в блоге: 17
05.04.2012, 04:48     Шаблон класса. #2
Меню чего?
1.- Меню в консоли.
2.- Меню в оконном приложении.
3.- ...
b0n4b
2 / 2 / 0
Регистрация: 16.11.2011
Сообщений: 100
05.04.2012, 10:19  [ТС]     Шаблон класса. #3
Avazart, в консоли. Дело в том, что я не совсем понимаю как устроен класс.
В большей мере мне не понятно как вызвать какую либо функцию командой (не знаю, правильно ли я это называю или нет)
Вот у меня задание реализовать класс очереди через массив. Операции над очередями я уже сделал, но не знаю как вызвать нужное действие командой.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
05.04.2012, 10:44     Шаблон класса. #4
b0n4b, Ну вы должны задать соответствие между коммандой и вызовом функции. Можно сделать через if/else. Можно сделать через мапу.
b0n4b
2 / 2 / 0
Регистрация: 16.11.2011
Сообщений: 100
05.04.2012, 10:50  [ТС]     Шаблон класса. #5
ForEveR, через if я написал, для того проверить корректно ли работают разные команды. Но мне нужен именно класс, ноя не знаю как его реализовать. Смотрел темы на форуме, но толком ничего не понял.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2012, 16:15     Шаблон класса.
Еще ссылки по теме:

C++ Создать шаблон некоторого класса, возможно, реализованного с применением некоторого серверного класса
C++ Шаблон класса с++
Шаблон класса, параметром которого должны являться наследники определённого класса C++

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

Или воспользуйтесь поиском по форуму:
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,578
Записей в блоге: 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");
}
Миниатюры
Шаблон класса.  
Yandex
Объявления
05.04.2012, 16:15     Шаблон класса.
Ответ Создать тему
Опции темы

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