Классы в С++.

Классы в С++ — это абстракция описывающая методы, свойства, ещё не существующих объектов. Объекты — конкретное представление абстракции, имеющее свои свойства и методы. Созданные объекты на основе одного класса называются экземплярами этого класса. Эти объекты могут иметь различное поведение, свойства, но все равно будут являться объектами одного класса. Класс позволяет программам группировать данные и функции которые выполняют операции над этими данными.

Классы состоят из свойств и методов. Свойства — это любые данные, которыми можно характеризовать объект класса, а методы — это функции, которые могут выполнять какие-либо действия над данными (свойствами) класса.

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

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

class Screen { /* ... */ };
class Screen { /* ... */ } myScreen, yourScreen;

Внутри тела объявляются данные-члены и функции-члены и указываются уровни доступа к ним. Таким образом, тело класса определяет список его членов.

public и private

Все свойства и методы классов имеют права доступа. По умолчанию, все содержимое класса является доступным для чтения и записи только для него самого. Для того, чтобы разрешить доступ к данным класса извне, используют модификатор доступа public. Все функции и переменные, которые находятся после модификатора public, становятся доступными из всех частей программы.

Закрытые данные класса размещаются после модификатора доступа private. Если отсутствует модификатор public, то все функции и переменные, по умолчанию являются закрытыми.

// Пример спецификатора public
class soldier
{
public:
  int x,y;
};

soldier a;
a.x = 3;
cout << a.x << "\n";

// Пример спецификатора доступа private
class soldier
{
private:
  int ammo;

public:
  int x,y;
}

soldier a;
a.x = 3;
a.y = 4;

a.ammo = 5; // !!! Данный код некорректен

Конструктор и деструктор класса

Конструктор — специальная функция, которая выполняет начальную инициализацию элементов данных, причём имя конструктора обязательно должна совпадать с именем класса. Важным отличием конструктора от остальных функций является то, что он не возвращает значений. В любом классе должен быть конструктор, даже если явным образом конструктор не объявлен. Пример конструктора:

class Students {
    public:
        // Конструктор класса Students
        Students(int default_score)
        {
            for (int i = 0; i < 5; ++i) {
                scores[i] = default_score;
            }
        }

    private:
        int scores[5];
};

int main()
{
    // Передаем двойку в конструктор
    Students *student = new Students(2);
    return 0;
}

Деструктор класса вызывается при уничтожении объекта. Имя деструктора аналогично имени конструктора, только в начале ставится знак тильды «~». Деструктор не имеет входных параметров. Пример деструктора:

#include <iostream>

class Students {
    public:
        // Деструктор
        ~Students()
        {
            std::cout << "Память очищена!" << std::endl;
        }
};

int main()
{
    Students *student = new Students;
    // Уничтожение объекта
    delete student;
    return 0;
}

Статические члены класса

Иногда нужно, чтобы все объекты некоторого класса имели доступ к единственному глобальному объекту. В некоторых случаях более эффективно иметь один глобальный объект, используемый всеми объектами класса, чем отдельные члены в каждом объекте. Хотя такой объект является глобальным, он существует лишь для поддержки реализации абстракции класса.

Именно поэтому решением является статический член класса, который ведет себя как глобальный объект, принадлежащий своему классу. В отличие от других членов, которые присутствуют в каждом объекте как отдельные элементы данных, статический член существует в единственном экземпляре и связан с самим типом, а не с конкретным его объектом. Это разделяемая сущность, доступная всем объектам одного класса.

Чтобы сделать член статическим, надо поместить в начале его объявления в теле класса ключевое слово static. К ним применимы все правила доступа к открытым, закрытым и защищенным членам. Например, для определенного ниже класса Account член _interestRate объявлен как закрытый и статический типа double:

class Account {                  // расчетный счет
   Account( double amount, const string &owner );
   string owner() { return _owner; }
private:
   static double _interestRate;  // процентная ставка
   double        _amount;        // сумма на счету
   string        _owner;         // владелец
};

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

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

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

Chinese (Traditional)EnglishJapaneseRussianUkrainian

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: