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

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

Войти
Регистрация
Восстановить пароль
 
no_wearines
52 / 48 / 2
Регистрация: 01.01.2012
Сообщений: 324
#1

Статические объекты - C++

05.11.2012, 19:37. Просмотров 1045. Ответов 9
Метки нет (Все метки)

Статические объекты имеют область действия файл.
Тобиш если я в одном файле определю глобальный статический объект, подключу другой файл например типа *.h с определенными там одноименными глобальными статическими объектами, то для каждого файла должны быть созданы отдельные объекты и не должно быть конфликта имен (ТАК Я ПОНЯЛ).
Второй случай: в одном файле определены глобальные статические объекты. По идее другие файлы недолжны их видеть (ТАК Я ПОНЯЛ). Да и в книгах тоже написано.
Но на практике эти правила не действуют (пробовал на C++ Builder 6, Borland C++ 5, Visual C++ 2008)
ИЛИ Я НЕПРАВИЛЬНО ПОНЯЛ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2012, 19:37     Статические объекты
Посмотрите здесь:

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

Константные статические объекты класса. - C++
Здравствуйте. Есть класс "матрица" нужно задать константные матрицы такие как E - единичная матрица и т.д., как это сделать? #include...

Выделение статической памяти, не используя статические объекты - C++
Здравствуйте! Как известно, когда мы объявляем статическую переменную, то компилятор выделяет ей место с самого начала, т. е....

Как правильно объявлять статические константные объекты в классе? - C++
В классе надо объявить статичные константные строки. Типа class A { public: static const std::string OLOLO = "ololo"; } Но так...

Можно ли добавлять статические объекты классов в STL контейнеры? - C++
Или обязательно добавлять ссылки на них в контейнер? Нигде не могу найти ответа.

Статические члены - C++
Мне необходимо создать класс А, причем: этот класс всегда нужен в единственном экземпляре, через этот класс работают классы В и С (т.е. в...

статические массивы - C++
Помогите, пожалуйста) Нужно выполнить следующее задание с использованием статических массивов: Дана квадратная матрица. Упорядочить...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
05.11.2012, 19:54     Статические объекты #2
Объекты должны определяться в .cpp файле, в .h должны быть только объявления.
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
05.11.2012, 19:57     Статические объекты #3
Цитата Сообщение от no_wearines Посмотреть сообщение
Но на практике эти правила не действуют (пробовал на C++ Builder 6, Borland C++ 5, Visual C++ 2008)
Всё действует.
Цитата Сообщение от no_wearines Посмотреть сообщение
ИЛИ Я НЕПРАВИЛЬНО ПОНЯЛ?
скорее всего.
no_wearines
52 / 48 / 2
Регистрация: 01.01.2012
Сообщений: 324
05.11.2012, 20:06  [ТС]     Статические объекты #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <conio.h>
#include "q.h"
using namespace std;
 
static int q;
 
int main()
{
    
    getch();
    return 0;
}
 
//q.h
static int q = 43;
static int f_1() {return 1;}
Пишет о конфликте имен
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
05.11.2012, 20:09     Статические объекты #5
естевственно. У вас же фаил q.h встроитвя в main.cpp. После работы препроцессора на вход компилятору попадет что-то вроде этого:
и будет
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
фаил iostream.h
фаил conio.h
//Содержимое файла q.h
static int q = 43;
static int f_1() {return 1;}
using namespace std; 
static int q;//<-а тут переопределение
 
int main()
{
    
    getch();
    return 0;
}
no_wearines
52 / 48 / 2
Регистрация: 01.01.2012
Сообщений: 324
05.11.2012, 20:11  [ТС]     Статические объекты #6
и как решается мое первое сообщение и замечаня книг?
что необходимо сделать?
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
05.11.2012, 20:12     Статические объекты #7
Цитата Сообщение от no_wearines Посмотреть сообщение
и как решается мое первое сообщение и замечаня книг?
что необходимо сделать?
Почитайте про процесс компиляции
no_wearines
52 / 48 / 2
Регистрация: 01.01.2012
Сообщений: 324
05.11.2012, 20:55  [ТС]     Статические объекты #8
и все же объясните. Примеров нигде не вижу
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
05.11.2012, 20:57     Статические объекты #9
Цитата Сообщение от no_wearines Посмотреть сообщение
и все же объясните. Примеров нигде не вижу
Посмотрите как работают препроцессор и линковщик. Станет все понятно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.11.2012, 21:40     Статические объекты
Еще ссылки по теме:

Массивы(статические) - C++
Найти максимальную по длине монотонную (т. е. либо неубывающую, либо невозрастающую) подпоследовательность заданного массива целых чисел ...

Статические массивы - C++
int a; cout &lt;&lt; sizeof(a) &lt;&lt; endl; cout &lt;&lt; a &lt;&lt; endl; Добрый день. Почему выводится, что sizeof(a)=16 байт. a же это адрес,...

Статические массивы - C++
Перевести в веденой строке все буквы из нижнего регистра в верхний?? Пожалуйста помогите!!! Добавлено через 56 секунд Пожалуйста!!!

Статические функции - C++
Начинаю изучать С++, написал код, но не хочет работать, подскажите, в чем может быть ошибка. class Sequence { public: Sequence(int...

статические массивы - C++
Дана ценлочисленная прямоугольная матрица. Определитть номер первого из столбцов, содержащих хотя бы один нулевой элемент. ...


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

Или воспользуйтесь поиском по форуму:
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
05.11.2012, 21:40     Статические объекты #10
Цитата Сообщение от no_wearines Посмотреть сообщение
и все же объясните. Примеров нигде не вижу
Компилятор фактически компилирует следующий файл:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[[содержимое iostream]]
[[содержимое conio.h]]
 
// [[содержимое q.h]]
static int q = 43;
static int f_1() {return 1;}
 
using namespace std;
 
static int q;
 
int main()
{
    
    getch();
    return 0;
}
Не удивительно, что всё конфликтует.

Чтобы "всё действовало", берёте один файл:
C++
1
2
3
4
5
6
7
8
9
10
// 1.cpp
static int func1()
{
    return 1;
}
 
int func2()
{
    return 2 * func1();
}
А потом пытаетесь собрать его вместе со вторым:
C++
1
2
3
4
5
6
7
8
9
10
// 2.cpp
#include <iostream>
 
int func1();
int func2();
 
int main()
{
    std::cout << func1() << " " << func2();
}
Он откомпилируется, но линкер вас обругает, что вы ему не выдали функцию func1(). func2() же экспортируется файлом 1.cpp
Yandex
Объявления
05.11.2012, 21:40     Статические объекты
Ответ Создать тему
Опции темы

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