# Во имя Бога Милостивого, Милосердного!!! # language: ru Функциональность: Преобразование в C++ Сценарий: Пустой пакет * Исходник: ``` package test ``` * Результат: ``` void loop() {} void setup() {} ``` Сценарий: Пустая структура - класс * Исходник: ``` package test type device struct {} ``` * Результат: ``` class device { public: }; ``` Сценарий: Структура с полем * Исходник: ``` package test type device struct { a int } ``` * Результат: ``` class device { public: int a; }; ``` Сценарий: Структура с полями одного типа * Исходник: ``` package test type device struct { a,b int } ``` * Результат: ``` class device { public: int a,b; }; ``` Сценарий: Структура с неск полями, строки - std::string * Исходник: ``` package test type device struct { a,b int c,d,e string } ``` * Результат: ``` class device { public: int a,b; std::string c,d,e; }; ``` Сценарий: Структура с методом * Исходник: ``` package test type device struct { a int } func (d *device) doSomething() { } ``` * Результат: ``` class device { public: int a; void doSomething(); }; void device::doSomething() { } ``` Сценарий: Структура с вызовом метода * Исходник: ``` package test type device struct { a int } func (d *device) doSomething() { d.doSomethingElse() } func (d *device) doSomethingElse() { } ``` * Результат: ``` class device { public: int a; void doSomething(); void doSomethingElse(); }; void device::doSomething() { this->doSomethingElse(); } void device::doSomethingElse() { } ``` Сценарий: Структура с вызовом метода другого объекта * Исходник: ``` package test type device struct { remote Other } func (d *device) doSomething() { d.remote.doSomethingElse() } ``` * Результат: ``` class device { public: Other remote; void doSomething(); }; void device::doSomething() { this->remote->doSomethingElse(); } ``` Сценарий: Структура с вызовом методов со входящими и выходящими параметрами * Исходник: ``` package test type device struct { a int } func (d *device) doSomething(i int, x string) { d.doSomethingElse(1, 0.5) d.doSomethingElse(i, 0.6) } func (d *device) doSomethingElse(i int, f float64) int { return 1 } func (d *device) doSomethingBool(i int, f float64) bool { return true } ``` * Результат: ``` class device { public: int a; void doSomething(int i,std::string x); int doSomethingElse(int i,double f); bool doSomethingBool(int i,double f); }; void device::doSomething(int i,std::string x) { this->doSomethingElse(1,0.5); this->doSomethingElse(i,0.6); } int device::doSomethingElse(int i,double f) { return 1; } bool device::doSomethingBool(int i,double f) { return true; } ``` Сценарий: Структура с изменением свойства * Исходник: ``` package test type device struct { x int y int } func (d *device) doSomething() { d.x = 1 d.x = d.y } ``` * Результат: ``` class device { public: int x; int y; void doSomething(); }; void device::doSomething() { this->x=1; this->x=this->y; } ``` Сценарий: Структура с вызовом метода и свойства другого объекта * Исходник: ``` package test type device struct { x int } func (d *device) doSomething() { dev2.doSomethingElse() } func (d *device) doSomethingElse() { dev2.x = 1 d.x = dev2.x } ``` * Результат: ``` class device { public: int x; void doSomething(); void doSomethingElse(); }; void device::doSomething() { dev2->doSomethingElse(); } void device::doSomethingElse() { dev2->x=1; this->x=dev2->x; } ``` Сценарий: Структура с объявлением переменных-указателей и их созданием * Исходник: ``` package test var ( dev1, dev2 *device ) type device struct {} func main() { dev1 = &device{} } ``` * Результат: ``` class device { public: }; void main(); device *dev1,*dev2; void main() { dev1=new device(); } ``` Сценарий: Структура с объявлением переменных-указателей и обычным Go конструктором * Исходник: ``` package test var ( dev1, dev2 *Device ) type Device struct {} func NewDevice() *Device { return &Device{} } func main() { dev1 = NewDevice() } ``` * Результат: ``` class Device { public: }; Device* NewDevice(); void main(); Device *dev1,*dev2; Device* NewDevice() { return new Device(); } void main() { dev1=NewDevice(); } ```