spamsink: (Default)
[personal profile] spamsink
Дальше будет про язык программирования C++, так что caveat lector.



Пусть есть маленькая программка на С++, написанная в стиле старого доброго Си: типы данных "plain old data", возможно, глобальные переменные, функции, но, скажем, с использованием относительно новомодного auto, где это удобно.

Возникает вопрос: что будет, если всё это взять и без изменений погрузить в один класс (скажем, Refact)? Объявленные типы становятся локальными в классе, глобальные переменные становятся элементами класса, функции становятся методами класса. Для полноты картины убеждаемся, что в первоначальной функции main, которая стала методом класса, возврат кода ответа везде явный, и дописываем настоящую функцию main, примерно как int main(int argc, char * argv[]) { return Refact().main(argc, argv); }

Какие подводные камни будут нас поджидать?

Date: 2020-07-02 07:10 am (UTC)
stas: (Default)
From: [personal profile] stas
Общение с внешними глобальными переменными, типа environ, ну и вообще extern?

Также, static в контексте класса значит не то, что глобально. Не будет ли проблем с доступом к переменным?

Date: 2020-07-02 07:29 am (UTC)
vak: (Default)
From: [personal profile] vak
Некоторые конструкции не пройдут.
К примеру:

char foo[] = "bar";
error: array bound cannot be deduced from an in-class initializer

extern void foobar();
error: storage class specified for a member declaration
Page generated Mar. 5th, 2026 01:40 am
Powered by Dreamwidth Studios