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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.73
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
07.02.2013, 01:37     Статические поля и наследование #1
Поймал себя на мысли, что не всё знаю о статических членах класса, а проверить, запустив тестовую программу-пример лень. Известно, что статическое поле класса будет общим для всех его экземпляров и работает как одна глобальная переменная.
Короче, если класс со статическим членом является базовым для двух классов-наследников, будет ли это поле общим для них?
Вопрос возникает даже при наличии одного наследника. Будет ли статическое поле при обращении из базового класса и из его наследника одной и той же переменной?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2013, 01:37     Статические поля и наследование
Посмотрите здесь:

C++ Статические поля класса
Статические объекты C++
C++ статические поля класса
C++ Статические поля и методы
Статические поля и unresolved символы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
07.02.2013, 01:46     Статические поля и наследование #2
будет
static переменные, определённые внутри класса, вообще не принадлежат классу, они даже не входят в sizeof(myclass), они лишь в его видимости... и не более, создаётся лишь одна такая переменная, для всех объектов класса и для всех потомков класса...
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
07.02.2013, 01:54  [ТС]     Статические поля и наследование #3
я понимаю, что она глобальна. Я лишь хотел убедиться, что в добавок к BaseClass::StaticField
при объявлении наследника class Derived: public BaseClass{};
не понадобится объявлять вторую глобальную переменную-статический метод как Derived::StaticField
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
07.02.2013, 01:58     Статические поля и наследование #4
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
я понимаю, что она глобальна. Я лишь хотел убедиться, что в добавок к BaseClass::StaticField
при объявлении наследника
не понадобится объявлять вторую глобальную переменную-статический метод.
она не совсем глобальна
static (type) val
сделаны, только с одной целью - чтобы не засорять глобальное пространство имён...

т.е. чтобы класс имел глобальную переменную лишь для себя - а точнее все его объекты, методы ну и в том числе потомки этого класса имели как-бы глобальную переменную, которой могли бы ей пользоваться, но только в пространстве видимости этого класса... и если любой объект класса, метод или потомок её изменит - она изменится для всех
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
07.02.2013, 02:04  [ТС]     Статические поля и наследование #5
Дружище, это и так ясно. Тут уже начинаются придирки к словам о глобальности и определения статических членов класса из учебника. Не надо, пожалуйста. Все новички на этом форуме знают что такое static поле.
Просто у меня к этому полю остался один вопрос, конкретный вопрос: не появляется ли второй экземпляр статической переменной-члена для каждого потомка класса?
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
07.02.2013, 02:08     Статические поля и наследование #6
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Дружище, это и так ясно. Тут уже начинаются придирки к словам о глобальности и определения статических членов класса из учебника. Не надо, пожалуйста. Все новички на этом форуме знают что такое static поле.
Просто у меня к этому полю остался один вопрос, конкретный вопрос: не появляется ли второй экземпляр статической переменной-члена для каждого потомка класса?
нет, не появляется, он общий для всех
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
07.02.2013, 02:24  [ТС]     Статические поля и наследование #7
очень жаль.
Выходит не получится создать базовый класс и использовать его для штампования разных "одиночек"?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Singleton{
public:
        static const Singleton& Instance(){
                return theSingleInstance;
        }
private:        
        static Singleton theSingleInstance;
        Singleton(const Singleton& root);
        Singleton& operator=(const Singleton&);
        Singleton(){};
};
Singleton Singleton::theSingleInstance;
class OnlyOneWindow: public Singleton{...};
class OnlyOneComputer: public Singleton{...};
class OnlyOneWorld: public Singleton{...};
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2013, 10:04     Статические поля и наследование
Еще ссылки по теме:

C++ Заменить наследование классов на наследование интерфейсов
C++ Чем отличаются статические поля от не статических?
C++ Статические функции

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

Или воспользуйтесь поиском по форуму:
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
07.02.2013, 10:04     Статические поля и наследование #8
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
очень жаль.
Выходит не получится создать базовый класс и использовать его для штампования разных "одиночек"?
Хинт: универсальный синглтон выглядит как Singleton<T>.
Yandex
Объявления
07.02.2013, 10:04     Статические поля и наследование
Ответ Создать тему
Опции темы

Текущее время: 23:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru