This repository has been archived on 2023-05-13. You can view files and clone it, but cannot push or open issues or pull requests.
mipt_cpp/seminar02_encapsulation/classroom_tasks/code/0book/01book.c
2022-09-14 19:05:27 +03:00

54 lines
2 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
Хоть язык 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);
}