none
Скажите пожалуйста, что делает static в объявлении класса? RRS feed

Ответы

  • Да, действительно, как я и предполагал, static в глобальной области может быть только ограничителем видимости переменной в пределах данного модуля (исходного файла). Допускается использование static в сочетании со словом class, если это выглядит, как объявление переменной. Например:

    static class A
    {
        ...
    } obj;
    
    

    где конструкция

    class A
    {
        ...
    }
    

    это тип данных

     


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    21 марта 2015 г. 7:49

Все ответы

  • Класс превращается в модуль. Т.е. он получается одним единственным на всё приложение. Объекты этого класса создавать нельзя будет. Он будет в одном единственном экземпляре.

    Сделаем содержимое сообщества лучше, вместе!

    • Изменено YatajgaEditor 20 марта 2015 г. 18:58
    • Предложено в качестве ответа Liliya Muray 21 марта 2015 г. 9:28
    20 марта 2015 г. 18:57
    Модератор
  • Не, компилируется:

    #include"stdafx.h"
    #include"iostream"
    using namespace std;
    static class base{
    public:
     int i = 3;
    };
    int main(){
     base ob;
     system("pause");
     return 0;
    }


    да и const, volatile, extern, register тоже можно использовать в объявлении класса. Тоже интересно зачем.


    20 марта 2015 г. 19:02
  • да и const, volatile, extern, register тоже можно использовать в объявлении класса. Тоже интересно зачем.
    Одна тема - один вопрос! Интересуют классы прочтите книгу про классы. Вы задали вопрос про Static - вам на него ответили, что это класс состоящий из одного элемента, который можно использовать в разных местах программы, типа глобальных функций и глобальной переменной и прочих шалостях в одном классе. Yatajga дал вам ответ, если он вам помог, то пометьте ответ как полезный и создайте новый вопрос с новой темой и содержанием. Если у вас не вопрос, а интересная тема для обсуждения, то создайте обсуждение...
    20 марта 2015 г. 19:45
  • Вот именно, что ответ он мне не дал.
    20 марта 2015 г. 19:46
  • А на какой ответ вы рассчитываете? Видео урок по работе со статическими классами? Лекцию с примерами?

    Коротко и четко, главное по существу... Все отличия от остальных классов назвал..

    20 марта 2015 г. 19:54
  • Всего лишь "Если класс объявлен как static, то ...". И если ещё не понятно, то объекты такого класса МОЖНО создать. Не смотря на слова Yatajga.
    20 марта 2015 г. 20:00
  • Если класс объявлен как static, то ...
    Имелось ввиду что объект типа static единичный в системе их не может быть два и более. А добавлять эту фразу зачем? Так много воды, а толку от нее ноль...
    20 марта 2015 г. 20:07
  • Я создал 3 объекта типа static base. И всё хорошо.
    20 марта 2015 г. 20:13
  • Под словом "объекты" имелись ввиду члены класса.
    Я если не знаю теорию читаю тут. Возможно я где-то и не права. Но может вам поможет та статья.
    • Изменено Liliya Muray 20 марта 2015 г. 20:26
    20 марта 2015 г. 20:21
  • Даже если под объектами понимать членов класса, то их тоже может быль больше одного, в C# всё несколько иначе (уже 3 раза за сегодня мне эту статью присылали).
    20 марта 2015 г. 20:31
  • :-)

    Классы C# и C++ это как сравнивать глаза у мужчин и женщин. Это понятия одинаковые для обоих языков.

    Так что для начала все таки советую изучить эту статью или почитать книги на эти темы.

    20 марта 2015 г. 20:41
  • Но у них прямо сказано: "нельзя создавать экземпляры статического класса.". А я создал, и не один.
    20 марта 2015 г. 20:47
  • и работает?!
    20 марта 2015 г. 20:50
  • Как часы. Только не понятно что изменилось с появлением static. В этом и вопрос.
    20 марта 2015 г. 20:51
  • Ну покажите код работающий как часы...
    20 марта 2015 г. 20:56
  • http://stackoverflow.com/questions/29175372/static-classes-c Так сказали парни на StackOverflow.
    20 марта 2015 г. 21:02
  • http://stackoverflow.com/questions/29175372/static-classes-c Так сказали парни на StackOverflow.

    бред потому что там написан...

    Описание класса в мое ссылке: public static class TemperatureConverter

    Использование: F = TemperatureConverter.CelsiusToFahrenheit(Console.ReadLine());

    20 марта 2015 г. 21:05
  • По С++14 даже не собирает. Получается VS не соответствует. Это печально. Мог бы тоже не собирать.
    20 марта 2015 г. 21:15
  • Коллеги. Не "ломайте копья". Вы не понимаете друг друга. Смысл ключевого слова static в C++ и C# не всегда совпадает.

    Leontii. Статический класс в C++ объявить нельзя. Можно создать класс-singleton, допускающий создание единственного экземпляра, но это делается иначе. Обычно ключевое слово static в глобальной области позволяет "запереть" объявление в рамках данного модуля. Завтра уточню в стандарте, что оно может означать в объявлении класса. А сейчас пора спать! :)


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    20 марта 2015 г. 21:19
  • Спасибо. На счёт static вроде понял "Ничего не делает и в C++ игнорируется", насчёт остальных предвкушаю что тоже самое, но подожду. Интересно всё-таки. Ибо google не понимает меня.
    20 марта 2015 г. 21:26
  • Я пользуюсь яндексом. Выдает уже проверенные временем ссылки, а не все подряд...

    Странно, а мне казалось понятие класс не зависит от языка... Это понятие из ООП...

    20 марта 2015 г. 21:46
  • Да, действительно, как я и предполагал, static в глобальной области может быть только ограничителем видимости переменной в пределах данного модуля (исходного файла). Допускается использование static в сочетании со словом class, если это выглядит, как объявление переменной. Например:

    static class A
    {
        ...
    } obj;
    
    

    где конструкция

    class A
    {
        ...
    }
    

    это тип данных

     


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    21 марта 2015 г. 7:49
  • То есть таким образом я и класс объявлю и переменную(obj) статической сделаю?
    21 марта 2015 г. 8:57
  • Да, именно так.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    21 марта 2015 г. 8:59
  • А с остальными модификаторами та же история?
    21 марта 2015 г. 9:11
  • Вы имеете ввиду auto, extern и register? extern действует по умолчанию, auto к глобальным переменным не применяется, а register для объекта класса смысла не имеет.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Предложено в качестве ответа Liliya Muray 21 марта 2015 г. 9:34
    21 марта 2015 г. 9:15
  • Даже не знаю как Вас благодарить, наконец то нормальные ответы получил. Спасибо Вам большое! 

    21 марта 2015 г. 9:18
  • Пожалуйста. Появятся новые вопросы - задавайте. Буду рад помочь :)

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    21 марта 2015 г. 9:21
  • Всё так же как и в c#, только синтаксис чуть другой... Поэтому считаю что Yatajga дал правильный ответ на вопрос, так как спрашивалось для чего используется static, а не как пишется синтаксис на конкретном языке.

    21 марта 2015 г. 9:28