55 lines
2 KiB
C
55 lines
2 KiB
C
|
/*
|
|||
|
Хоть язык C и не является объектно-ориентированным, некоторые зачатки подходов ООП в нём тоже есть
|
|||
|
Например, структуры языка C являются примером Абстракции
|
|||
|
|
|||
|
Для работы со структурами мы обычно писали функции так, что каждая из этих функций принимает на вход первым аргументом указатель на наш объект.
|
|||
|
Такой подход НЕ является примером Инкапсуляции, так как структура и функции для работы с ней являются независимыми друг от друга.
|
|||
|
При желании или по ошибке можно первым аргументом в эти функции передать вообще объект другого типа.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Эта программа написана на языке C, для компиляции используйте gcc:
|
|||
|
gcc 00book.c
|
|||
|
|
|||
|
Функции в этом примере делают следующее:
|
|||
|
|
|||
|
make_discount сделать скидку на книгу, но цена на книгу не может упасть ниже 0.
|
|||
|
print_book напечатать информацию о книге на экран
|
|||
|
*/
|
|||
|
|
|||
|
#include <stdio.h>
|
|||
|
|
|||
|
|
|||
|
struct book
|
|||
|
{
|
|||
|
char title[100];
|
|||
|
float price;
|
|||
|
int pages;
|
|||
|
};
|
|||
|
typedef struct book Book;
|
|||
|
|
|||
|
|
|||
|
void make_discount(Book* pb, int discount)
|
|||
|
{
|
|||
|
if (pb->price > discount)
|
|||
|
pb->price -= discount;
|
|||
|
else
|
|||
|
pb->price = 0;
|
|||
|
}
|
|||
|
|
|||
|
void print_book(const Book* pb)
|
|||
|
{
|
|||
|
printf("%s, price = %.2f, pages = %i\n", pb->title, pb->price, pb->pages);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
int main()
|
|||
|
{
|
|||
|
Book b = {"War and Peace", 1700, 900};
|
|||
|
|
|||
|
print_book(&b);
|
|||
|
make_discount(&b, 500);
|
|||
|
print_book(&b);
|
|||
|
}
|