Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 15.05.2014, 12:09   #1
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 03.09.2005
Сообщений: 14,014
Написано 6,795 полезных сообщений
(для 20,917 пользователей)
Статический класс

Статический класс
Суть данного вида состоит в том, что каждая функция данного класса является статической. Как правило, у данных типов класса не описаны конструктор и деструктор. Использовать статические функции класса можно, не создавая самого экземпляра класса. Это бывает удобно для создания списка функций, вложенных в какое-нибудь имя.
class print
{
    public:
    static void text(const char* string);
};
 
void print::text(const char* string)
{
    printf(string);
}
 
int main()
{
    print::text("Hello world!"); //Используем красивое вложение функции text из print;
}
чем это хуже, чем:
namespace print{
    void text(const char* string);
}

void print::text(const char* string){
    cout<<string<<endl;
}

int main()
{
    print::text("Hello world!");
    return 0;
}
Да ничем, блин. В том же Страуструпе в 8.2 сказано, что классы формируют свои пространства имён. А это (квалификатор), судя по статье, единственное, что нам требуется от этой конструкции.
Единственное что по определению позволяет нам модифицировать статическая функция-член - это статические же данные (предоставляя безопасный интерфейс и доп. обработку). Но данных-то нет. Здесь надо было бы использовать т.н. функции поддержки, не имеющие претензии на прямой доступ к компонентам класса. Но у нас вообще нет никаких данных - только методы, и то - открытые.
Единственное отличие в реализации - возможность запилить using namespace и опускать квалифкатор. Ну ещё - псевдонимы использовать, но не факт, что это минус.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 15.05.2014, 12:37   #2
HolyDel
 
Регистрация: 25.09.2006
Сообщений: 6,030
Написано 1,469 полезных сообщений
(для 2,690 пользователей)
Ответ: Статический класс

Единственное отличие в реализации - возможность запилить using namespace и опускать квалифкатор. Ну ещё - псевдонимы использовать, но не факт, что это минус.
о. а text2 я значит тоже в твой класс запилю в каком нибудь левом хидере...
по мне так это самый весомый минус.
в неймспейсы ты можешь дописывать. в классы - нет.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо HolyDel за это полезное сообщение:
falcon (26.05.2014), impersonalis (15.05.2014)
Старый 15.05.2014, 16:22   #3
Samodelkin
Мастер
 
Регистрация: 12.01.2009
Сообщений: 977
Написано 388 полезных сообщений
(для 630 пользователей)
Ответ: Статический класс

Сообщение от HolyDel Посмотреть сообщение
в неймспейсы ты можешь дописывать. в классы - нет.
А вот в штабе мелкомягких так не думают.
В c++/cx (msvs 2013) есть ключевое слово partial которое дает возможность в другом файле дописывать содержание класса.
Удобно при работе с xaml - когда один файл содержит генерируемую визуальным редактором часть класса, а другой для ручного кодинга программиста.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
impersonalis (15.05.2014)
Старый 04.06.2014, 10:38   #4
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,073
Написано 247 полезных сообщений
(для 514 пользователей)
Ответ: Статический класс

Сообщение от Samodelkin Посмотреть сообщение
А вот в штабе мелкомягких так не думают.
В c++/cx (msvs 2013) есть ключевое слово partial которое дает возможность в другом файле дописывать содержание класса.
Удобно при работе с xaml - когда один файл содержит генерируемую визуальным редактором часть класса, а другой для ручного кодинга программиста.
это только для CLI актуально.
(Offline)
 
Ответить с цитированием
Старый 04.06.2014, 12:22   #5
Samodelkin
Мастер
 
Регистрация: 12.01.2009
Сообщений: 977
Написано 388 полезных сообщений
(для 630 пользователей)
Ответ: Статический класс

Сообщение от pozitiffcat Посмотреть сообщение
это только для CLI актуально.
Нет, это актуально также в XAML, а он является бинарным нативным кодом.
(Offline)
 
Ответить с цитированием
Старый 05.06.2014, 18:09   #6
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,073
Написано 247 полезных сообщений
(для 514 пользователей)
Ответ: Статический класс

Сообщение от Samodelkin Посмотреть сообщение
Нет, это актуально также в XAML, а он является бинарным нативным кодом.
я про c++, с xaml знаком
(Offline)
 
Ответить с цитированием
Старый 05.06.2014, 19:53   #7
Samodelkin
Мастер
 
Регистрация: 12.01.2009
Сообщений: 977
Написано 388 полезных сообщений
(для 630 пользователей)
Ответ: Статический класс

Сообщение от pozitiffcat Посмотреть сообщение
я про c++, с xaml знаком
Я про С++ и говорю. XAML это разметка, а код пишется на С++, компилируется нативно и С++ классы можно разделять конструкцией partial в два разных хедера, потому что в одном файле находится часть класса которая генерируется и изменяется автоматически (визуальными инструментами), а вторая часть пишется пользователем. В CLI я мало работал, но насколько я помню там генератор влезает в тот же файл где прогер ручками работает и это сильно бесит. Это было где то в 2008 студии, не исключаю что потом это исправили. Но суть в том что такой механизм есть и при работе с xaml приложениями, а они компилируют нативный код, от CLI решили отказаться, а значит partial является механизмом компилятора, а не CLI среды.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
impersonalis (05.06.2014)
Старый 06.06.2014, 06:48   #8
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,505
Написано 2,960 полезных сообщений
(для 5,247 пользователей)
Ответ: Статический класс

Если посмотреть с точки зрения Net, то там вообще нет методов в неймспейсах (только делегаты). В результате, на мой взгляд, полное ООП. А в примере поста №1 - "С" с неймспейсами. И проблему с разделением классов на несколько файлов решают partial модификаторы да.

partial не только для xaml используются, а еще часто разделяют модель данных, сгенерированную дизайнером в Entity Framework или Linq to Sql (два ORM) и реализацию пользовательских функций для этой модели. Windows.Forms так же построен.

PS: я конечно больше не про С++, а про C#...
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +1, время: 18:37.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com