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

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

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

Author24 — интернет-сервис помощи студентам
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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.08.2010, 21:47
Ответы с готовыми решениями:

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

Почему переменная не увеличивается при добавлении константы в конструкторе(статические поля класса)?
Всем привет! Учу статические поля класса (книга Лафоре). Простой пример, который работает. При...

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

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

19
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
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
Автор FAQ
Автор FAQ
1802 / 614 / 37
Регистрация: 22.12.2009
Сообщений: 1,544
26.08.2010, 21:58 3
Попросту говоря , статическая переменная может быть инициализированная только в конструкторе класса, т.к. она сушествует еще до создания экземпляра данного класса.
0
Эксперт С++
261 / 191 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
26.08.2010, 22:02 4
Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

Инициализация статических членов класса делается в .cpp файле в таком виде:
C++
1
int mi::pa = 0;
Инициализация в конструкторе статического члена приведёт к тому, что значение будет обнуляться каждый раз при создании екземпляра класса.
7
Автор FAQ
Автор FAQ
1802 / 614 / 37
Регистрация: 22.12.2009
Сообщений: 1,544
26.08.2010, 22:04 5
Цитата Сообщение от Andrew_Lvov Посмотреть сообщение
Инициализация статических членов класса делается в .cpp файле в таком виде:
C++
1
int mi::pa = 0;
Инициализация в конструкторе статического члена приведёт к тому, что значение будет обнуляться каждый раз при создании екземпляра класса.
И правда, чтото не подумал, что бред написал. Я имел в виду статический конструктор.
1
10 / 10 / 2
Регистрация: 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
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
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
Эксперт С++
261 / 191 / 10
Регистрация: 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
10 / 10 / 2
Регистрация: 01.02.2010
Сообщений: 317
26.08.2010, 22:14  [ТС] 9
и как добраться до обычных переменных и статических тоже вне класса?
чет в книге ничего нет(
0
Эксперт С++
261 / 191 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
26.08.2010, 22:24 10
Цитата Сообщение от Krist_ALL Посмотреть сообщение
и как добраться до обычных переменных и статических тоже вне класса?
чет в книге ничего нет(
Назовите, откуда и к каким переменным вы хотите добраться.
1
10 / 10 / 2
Регистрация: 01.02.2010
Сообщений: 317
26.08.2010, 22:40  [ТС] 11
1 - почему дать значение статической переменной можно только вне маин?
2 - хочу вывести значение статической переменной не используя функцию класса а из вне. mi fa; cout <<fa.a как то так
3 - и как добраться до переменныз не статических тоже из вне.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
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
Эксперт С++
261 / 191 / 10
Регистрация: 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
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
26.08.2010, 22:47 14
Andrew_Lvov, А вот по 3 не согласен. Надо бы дописать, что только если переменные в паблике.
1
10 / 10 / 2
Регистрация: 01.02.2010
Сообщений: 317
26.08.2010, 22:51  [ТС] 15
понял спасибо всем большое - буду постигать ооп!
0
Эксперт С++
261 / 191 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
26.08.2010, 22:52 16
Lavroff,
Да, вы правы, я не заметил.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
class MyClass
{
  int a, b;
public:
  MyClass():a(0),b(0)
  {}
  int getA() {
    return a;
  }
  int getB() {
    return b;
  }
};
 
int main()
{
  MyClass c;
  std::cout << c.getA() << " " << c.getB() << std::endl;
}
UPD: поправлено
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
26.08.2010, 22:55 17
Andrew_Lvov, И опять тоже самое=)
C++
1
std::cout<< c.getA()<<' '<<c.getB()<<std::endl;
1
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
26.08.2010, 23:25 18
Цитата Сообщение от Rockedit Посмотреть сообщение
Я имел в виду статический конструктор.
В C++ нет статических конструкторов.
Krist_ALL, совместить определение с объявлением можно только, если статическое поле константно:
C++
1
2
3
4
class Foo {
private:
  static const int bar = 5;
};
0
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
27.08.2010, 01:45 19
Цитата Сообщение от Krist_ALL Посмотреть сообщение
1 - почему дать значение статической переменной можно только вне маин?
Статический член класса должен быть определен в той же области видимости, что и класс.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
24.02.2014, 10:52 20
Цитата Сообщение от Krist_ALL Посмотреть сообщение
мне нужно сделать переменную в классе статическую и публичную. но как я понял это возможно сделать только внутри какойто функции?
Только вне каких либо функций.
0
24.02.2014, 10:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.02.2014, 10:52
Помогаю со студенческими работами здесь

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

Статические члены класса
Доброго времени суток. Задача состоит в том, чтобы создать список обыектов класса Test, с...

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

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


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

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