54 lines
2 KiB
C
54 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);
|
||
}
|