Использование метода в структуре - C (СИ)
Формулировка задачи:
Как вложить метод в структуру? Ну и вызвать его по том от туда?
Компилятор вот такое собирать отказался:
сказал:
'init' : function cannot be member of struct '<unnamed-tag>'
Помогите плис.
void init() { printf("I love C"); } typedef struct { int a; void init(); } LIKE_A_CLASS;
Решение задачи: «Использование метода в структуре»
textual
Листинг программы
#include <stdio.h> typedef struct class_t { int a; int b; int (*getA)(const struct class_t*); int (*getB)(const struct class_t*); void (*setA)(struct class_t*, int); void (*setB)(struct class_t*, int); } TClass; int GetA(const TClass* st) { return st->a; } int GetB(const TClass* st) { return st->b; } void SetA(TClass* st, int value) { st->a = value; } void SetB(TClass* st, int value) { st->b = value; } int main() { TClass st = {0, 0, GetA, GetB, SetA, SetB}; st.setA(&st, 10); st.setB(&st, 20); printf("a = %d\n", st.getA(&st)); printf("b = %d\n", st.getB(&st)); return 0; }
Объяснение кода листинга программы
- Объявление структуры
TClass
с полямиa
,b
, методамиgetA
,getB
,setA
,setB
. - Определение функций
GetA
иGetB
, которые возвращают значения полейa
иb
соответственно. - Определение функций
SetA
иSetB
, которые устанавливают значения полейa
иb
соответственно. - Создание объекта
st
типаTClass
в функцииmain
и инициализация его полей нулевыми значениями. - Установка значений полей
a
иb
объектаst
равными 10 и 20 соответственно. - Вызов функций
getA
иgetB
для объектаst
и вывод результатов на экран. - Возврат 0 из функции
main
, что означает успешный конец работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д