www.boolean.name

www.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   Статический класс (http://forum.boolean.name/showthread.php?t=19174)

impersonalis 15.05.2014 12:09

Статический класс
 
Статический класс
Цитата:

Суть данного вида состоит в том, что каждая функция данного класса является статической. Как правило, у данных типов класса не описаны конструктор и деструктор. Использовать статические функции класса можно, не создавая самого экземпляра класса. Это бывает удобно для создания списка функций, вложенных в какое-нибудь имя.
Код:

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 и опускать квалифкатор. Ну ещё - псевдонимы использовать, но не факт, что это минус.

HolyDel 15.05.2014 12:37

Ответ: Статический класс
 
Цитата:

Единственное отличие в реализации - возможность запилить using namespace и опускать квалифкатор. Ну ещё - псевдонимы использовать, но не факт, что это минус.
о. а text2 я значит тоже в твой класс запилю в каком нибудь левом хидере...
по мне так это самый весомый минус.
в неймспейсы ты можешь дописывать. в классы - нет.

Samodelkin 15.05.2014 16:22

Ответ: Статический класс
 
Цитата:

Сообщение от HolyDel (Сообщение 280801)
в неймспейсы ты можешь дописывать. в классы - нет.

А вот в штабе мелкомягких так не думают.
В c++/cx (msvs 2013) есть ключевое слово partial которое дает возможность в другом файле дописывать содержание класса.
Удобно при работе с xaml - когда один файл содержит генерируемую визуальным редактором часть класса, а другой для ручного кодинга программиста.

pozitiffcat 04.06.2014 10:38

Ответ: Статический класс
 
Цитата:

Сообщение от Samodelkin (Сообщение 280817)
А вот в штабе мелкомягких так не думают.
В c++/cx (msvs 2013) есть ключевое слово partial которое дает возможность в другом файле дописывать содержание класса.
Удобно при работе с xaml - когда один файл содержит генерируемую визуальным редактором часть класса, а другой для ручного кодинга программиста.

это только для CLI актуально.

Samodelkin 04.06.2014 12:22

Ответ: Статический класс
 
Цитата:

Сообщение от pozitiffcat (Сообщение 282064)
это только для CLI актуально.

Нет, это актуально также в XAML, а он является бинарным нативным кодом.

pozitiffcat 05.06.2014 18:09

Ответ: Статический класс
 
Цитата:

Сообщение от Samodelkin (Сообщение 282072)
Нет, это актуально также в XAML, а он является бинарным нативным кодом.

я про c++, с xaml знаком

Samodelkin 05.06.2014 19:53

Ответ: Статический класс
 
Цитата:

Сообщение от pozitiffcat (Сообщение 282151)
я про c++, с xaml знаком

Я про С++ и говорю. XAML это разметка, а код пишется на С++, компилируется нативно и С++ классы можно разделять конструкцией partial в два разных хедера, потому что в одном файле находится часть класса которая генерируется и изменяется автоматически (визуальными инструментами), а вторая часть пишется пользователем. В CLI я мало работал, но насколько я помню там генератор влезает в тот же файл где прогер ручками работает и это сильно бесит. Это было где то в 2008 студии, не исключаю что потом это исправили. Но суть в том что такой механизм есть и при работе с xaml приложениями, а они компилируют нативный код, от CLI решили отказаться, а значит partial является механизмом компилятора, а не CLI среды.

pax 06.06.2014 06:48

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

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

PS: я конечно больше не про С++, а про C#...


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot