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

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

26.08.2010, 21:47. Показов 23451. Ответов 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)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.08.2010, 21:47
Ответы с готовыми решениями:

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

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

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

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

19
В астрале
Эксперт С++
 Аватар для ForEveR
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
 Аватар для Rockedit
1803 / 615 / 37
Регистрация: 22.12.2009
Сообщений: 1,544
26.08.2010, 21:58 3
Попросту говоря , статическая переменная может быть инициализированная только в конструкторе класса, т.к. она сушествует еще до создания экземпляра данного класса.
0
Эксперт С++
 Аватар для Andrew_Lvov
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
 Аватар для Rockedit
1803 / 615 / 37
Регистрация: 22.12.2009
Сообщений: 1,544
26.08.2010, 22:04 5
Цитата Сообщение от Andrew_Lvov Посмотреть сообщение
Инициализация статических членов класса делается в .cpp файле в таком виде:
C++
1
int mi::pa = 0;
Инициализация в конструкторе статического члена приведёт к тому, что значение будет обнуляться каждый раз при создании екземпляра класса.
И правда, чтото не подумал, что бред написал. Я имел в виду статический конструктор.
1
 Аватар для Krist_ALL
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
В астрале
Эксперт С++
 Аватар для ForEveR
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
Эксперт С++
 Аватар для Andrew_Lvov
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
 Аватар для Krist_ALL
10 / 10 / 2
Регистрация: 01.02.2010
Сообщений: 317
26.08.2010, 22:14  [ТС] 9
и как добраться до обычных переменных и статических тоже вне класса?
чет в книге ничего нет(
0
Эксперт С++
 Аватар для Andrew_Lvov
261 / 191 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
26.08.2010, 22:24 10
Цитата Сообщение от Krist_ALL Посмотреть сообщение
и как добраться до обычных переменных и статических тоже вне класса?
чет в книге ничего нет(
Назовите, откуда и к каким переменным вы хотите добраться.
1
 Аватар для Krist_ALL
10 / 10 / 2
Регистрация: 01.02.2010
Сообщений: 317
26.08.2010, 22:40  [ТС] 11
1 - почему дать значение статической переменной можно только вне маин?
2 - хочу вывести значение статической переменной не используя функцию класса а из вне. mi fa; cout <<fa.a как то так
3 - и как добраться до переменныз не статических тоже из вне.
0
В астрале
Эксперт С++
 Аватар для ForEveR
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
Эксперт С++
 Аватар для Andrew_Lvov
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
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
26.08.2010, 22:47 14
Andrew_Lvov, А вот по 3 не согласен. Надо бы дописать, что только если переменные в паблике.
1
 Аватар для Krist_ALL
10 / 10 / 2
Регистрация: 01.02.2010
Сообщений: 317
26.08.2010, 22:51  [ТС] 15
понял спасибо всем большое - буду постигать ооп!
0
Эксперт С++
 Аватар для Andrew_Lvov
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
В астрале
Эксперт С++
 Аватар для ForEveR
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
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 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
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
27.08.2010, 01:45 19
Цитата Сообщение от Krist_ALL Посмотреть сообщение
1 - почему дать значение статической переменной можно только вне маин?
Статический член класса должен быть определен в той же области видимости, что и класс.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
24.02.2014, 10:52 20
Цитата Сообщение от Krist_ALL Посмотреть сообщение
мне нужно сделать переменную в классе статическую и публичную. но как я понял это возможно сделать только внутри какойто функции?
Только вне каких либо функций.
0
24.02.2014, 10:52
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.02.2014, 10:52
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Как в цикле обойти все поля объекта в JavaScript
bytestream 28.01.2025
Объекты в JavaScript представляют собой фундаментальные структуры данных, которые позволяют хранить и организовывать связанную информацию в виде пар ключ-значение. Каждый объект можно представить как. . .
Как выбрать строки в DataFrame по значению столбца в Pandas
bytestream 28.01.2025
В области анализа данных библиотека Pandas стала незаменимым инструментом для работы с табличными данными в Python. Эта мощная библиотека предоставляет множество функций для эффективной обработки и. . .
Как сделать перенос строки в Bash
bytestream 28.01.2025
При работе с командной оболочкой Bash разработчики часто сталкиваются с необходимостью форматирования текстового вывода, где ключевую роль играет правильное управление переносами строк. Умение. . .
Поиск подстроки в строке с помощью Bash
bytestream 28.01.2025
Поиск подстроки в строке является одной из важных задач в программировании и обработке текстов. Применение такого поиска можно найти в самых разных областях, от анализа данных до разработки. . .
[golang] 169. Majority Element
alhaos 28.01.2025
Тут надо вернуть "мажористый" элемент который встречается в слайсе больше чем в половине случаев. По условиям задачи во входных данных такой элемент обязан присутствовать. / / . . .
Когда лучше использовать LinkedList вместо ArrayList в Java
bytestream 28.01.2025
При разработке Java-приложений выбор правильной структуры данных играет ключевую роль в обеспечении эффективности и производительности программы. ArrayList и LinkedList являются двумя. . .
Какой ответ HTTP лучше использовать: 403 Forbidden или 401 Unauthorized, когда недостаточно прав
bytestream 28.01.2025
В современной веб-разработке правильная обработка ошибок и точное информирование клиентов о статусе их запросов играют критическую роль в создании надежных и безопасных приложений. Особое внимание. . .
Как получить список всех файлов коммита в Git
bytestream 28.01.2025
Система контроля версий Git представляет собой мощный инструмент для управления изменениями в программном коде и других файлах проекта. В основе работы Git лежит концепция коммитов - снимков. . .
Как записать только часть изменений файла в Git
bytestream 28.01.2025
В процессе разработки программного обеспечения часто возникает необходимость сохранить только определенные изменения из множества внесенных правок в файлах. Система контроля версий Git предоставляет. . .
[golang] 80. Remove Duplicates from Sorted Array II
alhaos 28.01.2025
В предоставленном упорядоченном по возрастанию целочисленном слайсе, оставить уникальные элементы полюс один возможный дубликат. Вернуть количество таких элементов. / / . . .
Что такое внедрение зависимостей и для чего оно применяется
bytestream 27.01.2025
В современной разработке программного обеспечения одной из ключевых проблем является управление зависимостями между различными компонентами системы. Внедрение зависимостей (Dependency Injection, DI). . .
Как установить cellpadding и cellspacing в CSS
bytestream 27.01.2025
При создании веб-страниц с табличными данными разработчики часто сталкиваются с необходимостью правильного оформления внутренних и внешних отступов в таблицах. В традиционной разметке HTML для этих. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru