Объектно-ориентированное программирование

Определение классов

Последнее обновление: 09.03.2023

Кроме использования встроенных типов, таких как int, double и т.д., мы можем определять свои собственные типы или классы. Класс представляет составной тип, который может использовать другие типы.

Класс предназначен для описания некоторого типа объектов. То есть по сути класс является планом объекта. А объект представляет конкретное воплощение класса, его реализацию. Можно еще провести следующую аналогию. У нас у всех есть некоторое представление о человеке, у которого есть имя, возраст, какие-то другие характеристики. То есть некоторый шаблон - этот шаблон можно назвать классом. Конкретное воплощение этого шаблона может отличаться, например, одни люди имеют одно имя, другие - другое имя. И реально существующий человек будет представлять объект или экземпляр этого класса.

Для определения класса применяется ключевое слово class, после которого идет имя класса:

class имя_класса
{
	// компоненты класса
};

После названия класса в фигурных скобках располагаются компоненты класса. Причем после закрывающей фигурной скобки идет точка с запятой.

Например, определим простейший класс:

class Person { };

int main()
{

}

В данном случае класс называется Person. Как правило, названия классов начинаются с большой буквы. Допустим, данные класс представляет человека. Данный класс пуст, не содержит никаких компонентов, тем не менее он уже представляет новый тип. И после определения класса мы можем определять его переменные или константы:

class Person
{

};
int main()
{
	Person person;
}

Но данный класс мало что делает. Класс может определять переменные и константы для хранения состояния объекта и функции для определения поведения объекта. Поэтому добавим в класс Person некоторое состояние и поведение:

#include <iostream>

class Person 
{
public:
    std::string name;
    unsigned age;
    void print() 
    {
        std::cout << "Name: " << name << "\tAge: " << age << std::endl;
    }
};
int main()
{
    Person person;
    // устанавливаем значения полей класса
    person.name = "Tom";
    person.age = 38;
    // вызываем функцию класса
    person.print();
}

Теперь класс Person имеет две переменных name и age, которые предназначены для хранения имени и возраста человека соответственно. Переменные класса еще называют полями класса. Также класс определяет функцию print, которая выводит значения переменных класса на консоль. Также стоит обратить внимание на модификатор доступа public:, который указывает, что идущие после него переменные и функции будут доступны извне, из внешнего кода.

Затем в функции main создается один объект класса Person. Через точку мы можем обратиться к его переменным и функциям.

объект.компонент

Например, мы можем установить значения полей класса

person.name = "Tom";
person.age = 38;

Ну и также мы можем вызывать функции у объекта:

person.print();

Консольный вывод данной программы:

Name: Tom	Age: 38

Подобным образом можно получать значения переменных объектов

#include <iostream>

class Person 
{
public:
    std::string name;
    unsigned age;
    void print() 
    {
        std::cout << "Name: " << name << "\tAge: " << age << std::endl;
    }
};
int main()
{
    Person person;
    // устанавливаем значения полей класса
    person.name = "Bob";
    person.age = 42;
    // получаем значения полей
    std::string username = person.name;
    unsigned userage = person.age;
    // выводим полученные данные на консоль
    std::cout << "Name: " << username << "\tAge: " << userage << std::endl;
}

Также можно поля класса, как и обычные переменные, инициализировать некоторыми начальными значениями:

#include <iostream>

class Person 
{
public:
    std::string name{"Undefined"};
    unsigned age{18};
    void print() 
    {
        std::cout << "Name: " << name << "\tAge: " << age << std::endl;
    }
};
int main()
{
    Person person;
    person.print(); // Name: Undefined  Age: 18
}

Указатели на объекты классов

На объекты классов, как и на объекты других типов, можно определять указатели. Затем через указатель можно обращаться к членам класса - переменным и методам. Однако если при обращении через обычную переменную используется символ точка, то для обращения к членам класса через указатель применяется стрелка (->):

#include <iostream>

class Person 
{
public:
    std::string name;
    unsigned age;
    void print() 
    {
        std::cout << "Name: " << name << "\tAge: " << age << std::endl;
    }
};
int main()
{
    Person person;
    Person *ptr = &person;
    // обращаемся к полям и функции объекта через указатель
    ptr->name = "Tom";
    ptr->age = 22;
    ptr->print();
    // обращаемся к полям объекта
    std::cout << "Name: " << person.name << "\tAge: " << person.age << std::endl;
}

Изменения по указателю ptr в данном случае приведут к изменениям объекта person.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850