Показать сообщение отдельно
Старый 15.05.2014, 16:09   #1
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 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)
 
Ответить с цитированием