19. C++ Понятие класса

Понятие класса

В языке C++ активно используются классы, что они из себя представляют:
Как уже было сказано ранее – существует понятие структуры (обособление данных), так вот класс – своего рода продолжение структуры, в котором помимо данных существуют методы(функции для работы с этими данными).
Примечание: В языке C++ понятия структуры и класса имеют незначительные различия т.к. структуры могут работать с методами(функциями), но изначально классы создавались для работы с методами, а структуры (со времен чистого C) такой возможности не имели.

Собственно «обособление данных и методов работы с ними» и возможность скрыть реализацию от пользователя – есть суть инкапсуляции.

Также у классов есть возможность передавать все или часть своих свойств другим классам (там называемым классам-наследникам) данное свойство называется наследование.

Ну и разумеется у классов существует возможность переопределения методов, что позволяет использовать классы с одинаковым интерфейсом, не имея информации о типе и внутренней структуре – это полиморфизм.

Последнее объяснение несколько туманно – постараюсь объяснить на примере:
У нас есть класс родитель c_A с каким-то методом PrintInfo();
мы создаем некий класс потомок/наследник c_B и в нем изменяем функцию PrintInfo();

После где-нибудь в программе мы можем создать оба этих класса (c_A и c_B) и функцию. которая принимает аргумент – переменную типа класс A и вызывает функцию PrintInfo();
getInfoAbout(A cl_A)
{
cl_A. PrintInfo();
}
Если мы в эту функцию  передадим объект класса A, то все логично, getInfoAbout(c_A); вызовет функцию PrintInfo(); из класса c_A.
Но если мы передадим объект класса B (наследник, в котором переопределили метод PrintInfo();) то getInfoAbout(c_B); также выполнит свою работу, и вызовут внутри функцию PrintInfo(); из класса- наследника c_B.

Думаю объяснение все равно достаточно туманное, но пока не придумал как объяснить лучше…
думаю впоследствии при подробном обсуждении темы и на примерах будет более понятно.

Постараюсь объяснить терминологию:
Класс – своего рода шаблон, по которому создаются переменные – экземпляры/объекты этого класса.
Внутри класса есть поля класса – обычные, простые переменные типа int, long… массивы, указатели (в т.ч. в динамической памяти), могут быть другие классы и структуры.
>>Для обращения к полям класса внутри класса можно использовать ключевое this->
Также у класса есть методы – функции, объявленные внутри класса и предназначенные для работы с ним.

Рассмотрим объявление классов в С++ в общем виде:
class /*имя класса*/
{
модификатор доступа:
/* список полей и методов */
};

Модификаторы доступа мы рассмотрим чуть позднее, пока будем использовать public:

В теме «структуры» мы создавали структуру для хранения данных о человеке (возраст и имя) и снаружи писали и вызывали функцию для получения этих данных, перепишем это используя понятие класса.

 class Person
{

  //модификатор доступа
public:
  //Методы класса
  void GetInfo()
  {
    cout<<"Name: "<< this->Name <<" age "<< this->age <<endl; //выводим данные на экран
  }

 
   //поля класса
   unsigned int age;
   string Name;
};

//Создадим объект класса Person и проинициализируем его поля.
Person c_Person1;
c_Person1.age=30;
c_Person1.Name="Vasya";
c_Person1.GetInfo(); //Выведет в консоль Neme: Vasya age 30

Помните, ранее для нескольких экземпляров структуры нам приходилось придумывать и писать 3 раза функции вывода на экран, теперь же мы можем вызвать метод c_Person1.GetInfo(); у требуемого экземпляра класса Person.

Сейчас кажется – какая разница написать пару cout не так и сложно, но представьте, что класс Person имел бы большее число полей, а внутри метода GetInfo(); была бы реализация на несколько десятков/сотен строк кода.
Гораздо удобнее вызывать один метод (+ удобнее исправлять код, т.к. реализация написана лишь в 1 месте.)

Стоит отметить, что число полей класса не ограничено, также как и число методов.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *