|
15.05.2014, 16:09
|
#1
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Статический класс
Статический класс
Суть данного вида состоит в том, что каждая функция данного класса является статической. Как правило, у данных типов класса не описаны конструктор и деструктор. Использовать статические функции класса можно, не создавая самого экземпляра класса. Это бывает удобно для создания списка функций, вложенных в какое-нибудь имя.
|
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, 16:37
|
#2
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Статический класс
Единственное отличие в реализации - возможность запилить using namespace и опускать квалифкатор. Ну ещё - псевдонимы использовать, но не факт, что это минус.
|
о. а text2 я значит тоже в твой класс запилю в каком нибудь левом хидере...
по мне так это самый весомый минус.
в неймспейсы ты можешь дописывать. в классы - нет.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо HolyDel за это полезное сообщение:
|
|
15.05.2014, 20:22
|
#3
|
Мастер
Регистрация: 12.01.2009
Сообщений: 980
Написано 389 полезных сообщений (для 632 пользователей)
|
Ответ: Статический класс
Сообщение от HolyDel
в неймспейсы ты можешь дописывать. в классы - нет.
|
А вот в штабе мелкомягких так не думают.
В c++/cx (msvs 2013) есть ключевое слово partial которое дает возможность в другом файле дописывать содержание класса.
Удобно при работе с xaml - когда один файл содержит генерируемую визуальным редактором часть класса, а другой для ручного кодинга программиста.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
04.06.2014, 14:38
|
#4
|
Мастер
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений (для 533 пользователей)
|
Ответ: Статический класс
Сообщение от Samodelkin
А вот в штабе мелкомягких так не думают.
В c++/cx (msvs 2013) есть ключевое слово partial которое дает возможность в другом файле дописывать содержание класса.
Удобно при работе с xaml - когда один файл содержит генерируемую визуальным редактором часть класса, а другой для ручного кодинга программиста.
|
это только для CLI актуально.
|
(Offline)
|
|
04.06.2014, 16:22
|
#5
|
Мастер
Регистрация: 12.01.2009
Сообщений: 980
Написано 389 полезных сообщений (для 632 пользователей)
|
Ответ: Статический класс
Сообщение от pozitiffcat
это только для CLI актуально.
|
Нет, это актуально также в XAML, а он является бинарным нативным кодом.
|
(Offline)
|
|
05.06.2014, 22:09
|
#6
|
Мастер
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений (для 533 пользователей)
|
Ответ: Статический класс
Сообщение от Samodelkin
Нет, это актуально также в XAML, а он является бинарным нативным кодом.
|
я про c++, с xaml знаком
|
(Offline)
|
|
05.06.2014, 23:53
|
#7
|
Мастер
Регистрация: 12.01.2009
Сообщений: 980
Написано 389 полезных сообщений (для 632 пользователей)
|
Ответ: Статический класс
Сообщение от pozitiffcat
я про c++, с xaml знаком
|
Я про С++ и говорю. XAML это разметка, а код пишется на С++, компилируется нативно и С++ классы можно разделять конструкцией partial в два разных хедера, потому что в одном файле находится часть класса которая генерируется и изменяется автоматически (визуальными инструментами), а вторая часть пишется пользователем. В CLI я мало работал, но насколько я помню там генератор влезает в тот же файл где прогер ручками работает и это сильно бесит. Это было где то в 2008 студии, не исключаю что потом это исправили. Но суть в том что такой механизм есть и при работе с xaml приложениями, а они компилируют нативный код, от CLI решили отказаться, а значит partial является механизмом компилятора, а не CLI среды.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
06.06.2014, 10:48
|
#8
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Статический класс
Если посмотреть с точки зрения Net, то там вообще нет методов в неймспейсах (только делегаты). В результате, на мой взгляд, полное ООП. А в примере поста №1 - "С" с неймспейсами. И проблему с разделением классов на несколько файлов решают partial модификаторы да.
partial не только для xaml используются, а еще часто разделяют модель данных, сгенерированную дизайнером в Entity Framework или Linq to Sql (два ORM) и реализацию пользовательских функций для этой модели. Windows.Forms так же построен.
PS: я конечно больше не про С++, а про C#...
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:46.
|