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

Перегрузка операции "++" - C++

Восстановить пароль Регистрация
 
Kayako
1 / 1 / 0
Регистрация: 14.10.2010
Сообщений: 23
14.04.2012, 23:20     Перегрузка операции "++" #1
Подскажите пожалуйста!
Необходимо создать переменную место нахождения и её значения : на складе, в торговом зале, на витрине. Далее нужно перегрузить операцию operator++ для изменения места нахождения. Каким образом это можно реализовать.

Я думаю может можно сделать это через

C++
1
char mesto_nax[3][17] = {"na sklade", "v torgovom zale", "na vitrine"};
или нет?
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
14.04.2012, 23:26
  #2

Не по теме:

Цитата Сообщение от Kayako Посмотреть сообщение
mesto_nax
вы бы думали над названием идентификаторов, маты на форуме запрещены

Султан
4 / 4 / 1
Регистрация: 11.03.2012
Сообщений: 114
14.04.2012, 23:46     Перегрузка операции "++" #3
Почему не сделать с помощью enum список и ++ изменять его значение и получать значение...
Например
C++
1
enum mesto {na sklade, v torgovom zale, na vitrine};
Jupiter, +1
Kayako
1 / 1 / 0
Регистрация: 14.10.2010
Сообщений: 23
14.04.2012, 23:55  [ТС]     Перегрузка операции "++" #4
Цитата Сообщение от Султан Посмотреть сообщение
enum {na sklade, v torgovom zale, na vitrine};
А как в таком случае сделать перегрузку?
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
15.04.2012, 00:06     Перегрузка операции "++" #5
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
#include <iostream>
 
namespace product {
   enum location { T_IN_STOCK, T_ON_DISPLAY, T_IN_HALL, T_SIZE };
   const char* str[T_SIZE] = { "in stock", "on display", "in hall" };
}
 
class product_location {
public:
   explicit product_location(product::location location) : m_location(location) {}
   
   product::location location() const { return m_location; }
   void setLocation(product::location location) { m_location = location; }
private:
   product::location m_location;
};
 
std::ostream& operator << (std::ostream& os, const product_location& loc)
{
   return (os << product::str[loc.location()]);
}
 
product_location& operator ++ (product_location& obj)
{
   product::location loc = static_cast<product::location>(obj.location() + 1);
   if (loc >= product::T_SIZE)
      loc = product::T_IN_STOCK;
   obj.setLocation(loc);
   return obj;
}
 
product_location operator ++ (product_location& obj, int)
{
   product_location copy(obj);
   product::location loc = static_cast<product::location>(obj.location() + 1);
   if (loc >= product::T_SIZE)
      loc = product::T_IN_STOCK;
   obj.setLocation(loc);
   return copy;
}
 
int main()
{
   product_location loc(product::T_IN_STOCK);
   std::cout << loc << '\n';
   ++loc;
   std::cout << loc << '\n';
   loc++;
   std::cout << loc << '\n';
   ++loc;
   std::cout << loc << '\n';
   loc++;
   std::cout << loc << '\n';
}
Султан
4 / 4 / 1
Регистрация: 11.03.2012
Сообщений: 114
15.04.2012, 00:15     Перегрузка операции "++" #6
Kayako,
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
#pragma hdrstop
 
#include <iostream.h>
#include <conio.h>
#include <tchar.h>
#include <string>
 
class c1
{
    private:
        enum mesto {na_sklade, v_torgovom_zale, na_vitrine};
        int i;
    public:
        c1():i(0){}
        int operator++()
        {
            i++;
            return i;
        }
 
        int showI ()
        {return i;}
 
        void P () const
        {
            switch (i) {
                case 0: cout<<"Sklad"<<endl;break;
                case 1: cout<<"Zal"<<endl;break;
                case 2: cout<<"Vit"<<endl;break;
            }
        }
};
//---------------------------------------------------------------------------
 
using namespace std;
#pragma argsused
int main(int argc, _TCHAR* argv[])
{
    wcout.imbue(locale(".866"));
 
    c1 c;
    c.P();
    c++;
    c.P();
 
    system("pause");
    return 0;
}
//---------------------------------------------------------------------------
Ну а первоначальное местонахождение задать конструктором.Как вариант.Можно и проверку на выхож за местонахождение сделать...
Это как вариант...по моему мнению.
Yandex
Объявления
15.04.2012, 00:15     Перегрузка операции "++"
Ответ Создать тему
Опции темы

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