Использование метода в структуре - 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, что означает успешный конец работы программы.