Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 119, средняя оценка - 4.85
Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
#1

Статические поля класса - C++

26.08.2010, 21:47. Просмотров 16582. Ответов 19
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
class mi {
   int a,b;
 
public: mi(int a, int b) : a(a),b(b) {}
         void  sw() { std::cout<<a<<" - "<<b<<std::endl; }
         static int pa = 9;
    
};
мне нужно сделать переменную в классе статическую и публичную. но как я понял это возможно сделать только внутри какойто функции?
а просто как у меня в коде нельзя?
пишет ошибку - error C2252: 'pa' : pure specifier can only be specified for functions
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.08.2010, 21:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Статические поля класса (C++):

Статические поля класса - C++
Не подскажете как инициализировать статический массив? Но чтобы я сам мог ввести этот массив.

Статические поля и наследование - C++
Поймал себя на мысли, что не всё знаю о статических членах класса, а проверить, запустив тестовую программу-пример лень. Известно, что...

Статические поля и методы - C++
Ни как не могу понят что же такое статические поля и методы, и какое их принципиальное отличие от простых методов полей.

Статические поля и unresolved символы - C++
пытаюсь создать модель аквариума на с++ ...использую в качестве аквариума класс со статическими полями...при компиляции пишет...

Статические члены класса - C++
Доброго времени суток. Задача состоит в том, чтобы создать список обыектов класса Test, с возможностью последующего добавления элементов...

Статические данные класса - C++
Здравствуйте. Подскажите, почему при создании класса Date не происходит бесконечного вызова конструкторов? class Date { ...

19
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
26.08.2010, 21:50 #2
В private раздел перенес из за личных предпочтений

C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
using namespace std;
 
class mi {
   int a,b;
   static int pa;
 
public: mi(int a, int b) : a(a),b(b) {pa=9;}
         void  sw() { std::cout<<a<<" - "<<b<<std::endl; }
        
};
1
Rockedit
Автор FAQ
Автор FAQ
1760 / 566 / 9
Регистрация: 22.12.2009
Сообщений: 1,544
26.08.2010, 21:58 #3
Попросту говоря , статическая переменная может быть инициализированная только в конструкторе класса, т.к. она сушествует еще до создания экземпляра данного класса.
0
Andrew_Lvov
Эксперт С++
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
26.08.2010, 22:02 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Инициализация статических членов класса делается в .cpp файле в таком виде:
C++
1
int mi::pa = 0;
Инициализация в конструкторе статического члена приведёт к тому, что значение будет обнуляться каждый раз при создании екземпляра класса.
6
Rockedit
Автор FAQ
Автор FAQ
1760 / 566 / 9
Регистрация: 22.12.2009
Сообщений: 1,544
26.08.2010, 22:04 #5
Цитата Сообщение от Andrew_Lvov Посмотреть сообщение
Инициализация статических членов класса делается в .cpp файле в таком виде:
C++
1
int mi::pa = 0;
Инициализация в конструкторе статического члена приведёт к тому, что значение будет обнуляться каждый раз при создании екземпляра класса.
И правда, чтото не подумал, что бред написал. Я имел в виду статический конструктор.
1
Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
26.08.2010, 22:11  [ТС] #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
class mi {
    int a,b;
                public: mi(int a, int b) : a(a),b(b) {}
           void sw() { std::cout<<a<<" - "<<b<<std::endl; }
                  static int pa;
};
 
int main() {
int  mi::pa = 8;
 
mi alpha(2,4);
alpha.sw();
return 0;
 
}
error C2655: 'pa' : definition or redeclaration illegal in current scope
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
26.08.2010, 22:11 #7
Krist_ALL, э. ну не в функции же. в глобальном надо.
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
 
class mi {
   int a,b;
   static int pa;
 
public: mi(int a, int b) : a(a),b(b) {}
        void  sw() { std::cout<<a<<" - "<<b<<std::endl; }        
};
 
int mi::pa=9;
0
Andrew_Lvov
Эксперт С++
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
26.08.2010, 22:12 #8
C++
1
int  mi::pa = 8;
Инициализация должна быть вне функции.

C++
1
2
int  mi::pa = 8;
int main() {
0
Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
26.08.2010, 22:14  [ТС] #9
и как добраться до обычных переменных и статических тоже вне класса?
чет в книге ничего нет(
0
Andrew_Lvov
Эксперт С++
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
26.08.2010, 22:24 #10
Цитата Сообщение от Krist_ALL Посмотреть сообщение
и как добраться до обычных переменных и статических тоже вне класса?
чет в книге ничего нет(
Назовите, откуда и к каким переменным вы хотите добраться.
1
Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
26.08.2010, 22:40  [ТС] #11
1 - почему дать значение статической переменной можно только вне маин?
2 - хочу вывести значение статической переменной не используя функцию класса а из вне. mi fa; cout <<fa.a как то так
3 - и как добраться до переменныз не статических тоже из вне.
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
26.08.2010, 22:44 #12
Krist_ALL,
1. Вне функций вцелом.
2. Не выводится?
У меня вполне:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
class mi {
   int a,b;
 
public: mi(int a, int b) : a(a),b(b) {}
        mi(){}
        void  sw() { std::cout<<a<<" - "<<b<<std::endl; }        
        static int pa;
};
 
int mi::pa=9;
 
int main()
{
   mi n;
   std::cout<< n.pa <<'\n';
   return 0;
}
3. Засунуть их в паблик (не рекомендуется), создать специальные функции, одна из которых задает значение, вторая возвращает.
0
Andrew_Lvov
Эксперт С++
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
26.08.2010, 22:45 #13
Цитата Сообщение от Krist_ALL Посмотреть сообщение
1 - почему дать значение статической переменной можно только вне маин?
Речь идёт о первичной инициализации. Статическое поле класса - это фактически глобальная переменная.
2 - хочу вывести значение статической переменной не используя функцию класса а из вне. mi fa; cout <<fa.a как то так
C++
1
std::cout << mi::fa;
3 - и как добраться до переменныз не статических тоже из вне.
C++
1
2
mi m1;
std::cout << m1.a;
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
26.08.2010, 22:47 #14
Andrew_Lvov, А вот по 3 не согласен. Надо бы дописать, что только если переменные в паблике.
1
Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
26.08.2010, 22:51  [ТС] #15
понял спасибо всем большое - буду постигать ооп!
0
26.08.2010, 22:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.08.2010, 22:51
Привет! Вот еще темы с ответами:

Статические члены класса - C++
Добрый день. Проходили тему - статические члены класса. Написали программу, вылезает ошибка, помогите побороть пожалуйста. #include...

Чем отличаются статические поля от не статических? - C++
чем отличаются статические от не статических полей? почему нельзя создать счетчик без статических полей?

Статические массивы, члены класса - C++
необходимо создать статический массив. компилятор gcc #include&lt;iostream&gt; class c{ public: static const char x = &quot;qwe&quot;; ...

Статические методы класса (static) - C++
Доброго времени суток! Читаю &quot;Решение сложных задач С++ - Саттер&quot;, у него есть такая задача: вы хотите написать шаблон класса MyClass,...


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

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

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