С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
3 / 3 / 2
Регистрация: 18.05.2014
Сообщений: 203
1

Использование static методов

05.03.2015, 02:59. Показов 588. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте ,у меня есть код для очереди ,но мне хочется ,чтобы функции работали без создания объектов или как я помню из частичного курса по c# они должны быть типа static. Как далее сделать ,чтобы переменные

C++
1
2
3
4
int start=-1; //индекс начального;
        int m_size=0; //индекс конечного
 
       int m_elements[10000];
были видны внутри функций ,а то компилятор ругается ,что их нужно объявить какк static , но тогда прийдется объявлять как const , а этого мне не надо...

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
#include <iostream>
 
using namespace std;
 
      class Queue
    {
        int start=-1; //индекс начального;
        int m_size=0; //индекс конечного
 
 
       int m_elements[10000];
 
       static void push(int n)
        {
            start++;
            m_elements[m_size++]=n;
            cout <<"        ok" << endl;
        }
 
       static void pop()
        {
            if(m_size==0)
            {
                cout <<"        error" << endl;
                return;
            }
            m_size--;
            cout << "       " << m_elements[start++] << endl;
        }
 
       static void front()
        {
            if(m_size==0)
            {
                cout << "      error" << endl;
                return;
            }
 
            cout << m_elements[start] << endl;
        }
 
       static void size()
        {
            cout << "       " << m_size << endl;
        }
 
       static void clear()
        {
            start=-1;
            m_size=0;
            cout <<"        ok" << endl;
        }
 
       static void exit()
        {
            cout << "bye" << endl;
            return;
        }
 
    };
 
int main()
{
    string st;
    int num;
 
    do
    {
        cin >> st;
 
        if(st=="push")
        {
            cin >> num;
            Queue.push(n);
            continue;
        }
 
        if(st=="pop")
        {
            Queue.pop();
            continue;
        }
 
        if(st=="front")
        {
            Queue.front();
            continue;
        }
 
        if(st=="size")
        {
            Queue.size();
            continue;
        }
 
        if(st=="clear")
        {
            Queue.clear();
            continue;
        }
 
        if(st=="exit")
        {
            Queue.exit();
            return 0;
        }
 
    }while(true);
}
Вот что выводится при попытке назначения внутриклассовым переменным static:

C:\Users\maksvolf\Desktop\c++projects\queue\main.cpp|7|error: ISO C++ forbids in-class initialization of non-const static member 'Queue::start'|

Суть в том ,что мне нужно ,чтобы не создавался объект
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.03.2015, 02:59
Ответы с готовыми решениями:

Использование static переменной через extern
Есть форма, на ней две кнопки. Одна кнопка по нажатию добавляет элементы в класс-массив. Код...

Использование модификатора static для элементов класса
Доброго время суток! Господа, бьюсь бьюсь в двух средах разработки и с одной книжкой... И...

Использование шаблоных методов
Есть код: class A { public: static void Set( unsigned param ) { ...

Использование рекурсивных методов
Потрібен приклади використання рекурсивних методів / надо примеры использование рекурсивных методов...

3
шКодер самоучка
2282 / 1958 / 945
Регистрация: 09.10.2013
Сообщений: 4,370
Записей в блоге: 10
05.03.2015, 08:21 2
Вам нужно объявить статическими не только методы, но и поля класса, используемые в этих методах.
Только учтите, что очередь этого класса будет в единственном экземпляре.
0
Модератор
Эксперт С++
13714 / 10913 / 6476
Регистрация: 18.12.2011
Сообщений: 29,141
05.03.2015, 08:43 3
Цитата Сообщение от maksvolf96 Посмотреть сообщение
Queue.push(n);
Вызов статических методов без создания экземпляра осуществляется через два двоеточия
C++
1
Queue::push(n);
Но я бы просто создал один глобальный экземпляр класса и не надо никаких static
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Queue
    {
....
    }queue;
 
int main()
{
    string st;
    int num;
     do
    {
        cin >> st;
 
        if(st=="push")
        {
            cin >> num;
            queue.push(num);
            continue;
        }
 ....
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
05.03.2015, 14:01 4
Цитата Сообщение от maksvolf96 Посмотреть сообщение
Суть в том ,что мне нужно ,чтобы не создавался объект
И на ёлку залезть и не поцарапаться? Может быть тебе просто синглтон реализовать?
0
05.03.2015, 14:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.03.2015, 14:01
Помогаю со студенческими работами здесь

Использование переборных методов
Ребят! Помогите решить задачу!! Использование переборных методов разработка программы нахождения...

Ханойская башня (использование переборных методов)
Использование переборных методов (разработка программ решения задачи «Ханойская башня»). на С++

Использование массивов внутри методов класса
Нужно сделать так, чтобы массив NextBrick можно было использовать в ShowNB. При этом Массив...

Использование методов класса в самом классе
Вообще есть класс нужно объедение все его методы в один метод. Пример: class Test{ public:...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru