struct

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

В языке C++ уже определена такая вещь как структура. Структура - это составной тип данных, который может содержать в себе несколько переменных-членов.

Создадим стуктуру, описанную нами выше:

struct car
{
	int price;
	char name[50];
};

Как обращаться со стуктурой? Это достаточно просто - мы можем обращаться как с обычной переменной:

car Tesla; // инициализация структурной переменной
car cars[50]; // также можем создавать массивы
Tesla.price = 100; // обращаемся к члену стуктуры
cout << Tesla.price;

ООП

Использование структур неминуемо ведет нас в Объектно Ориентированное Программирование (ООП). ООП - это особый концептуальный подход к проектированию программ. Наиболее важными характеристиками ООП являются:

  • Абстракция
  • Инкапсуляция и сокрытие данных
  • Полиморфизм
  • Наследование
  • Повторное использование кода

Класс - расширение С++ (относительно С), предназначенное для реализации средств. Чтобы упростить идентификацию классов, программисты прищли к соглашению, что классы должны именоваться с большой буквы. Рассмотрим объявление класса:

class Bank_account
{
private:
	int amount;
public:
	Bank_account() { amount = 0; };
	int Add(int number);
	int Remove(int number);
	void Show_money();
};

Здесь мы создали Bank_account. Класс - это способ описания сущности, определяющий состояние и поведение, зависящее от этого состояния, а также правила для взаимодействия с данной сущностью. В данном случае наш класс описывает счет в банке. Пусть методами данного класса будут Add (добавить некоторую сумму), Remove (снять некоторую сумму) и Show_money - показать баланс.

Объектом (экземпляром) класса будем называть отдельный представитель класса. Людей много, а счет один.

Новыми словами являются private и public. Любая программа, использующая объект определенного класса, может иметь доступ к членам из раздела public. Доступ к членам из раздела private программа может получить только через открытые функции-члены из раздела public, или по другому, из интерфейса. Этот подход называется сокрытием данных. Открытые функции-члены называют методами.

Рассмотрим члены private. Здесь мы описываем то, как хранятся наши данные. В данном случае у нас всего одна переменная - amount (количество средств). Доступ к этому члену происходит только через public.

Теперь рассмотрим члены public. Первый член данного раздела - конструктор этого класса. Что такое конструктор? Конструктор - это особая функция, инициализирующая значения переменных из private. В нашем конструкторе мы инициализировали amount = 0. При отсутствии конструктора он создастся автоматически.

Далее у нас перечислены методы класса. Согласно стандарту программирования C++ классы должны именоваться с большой буквы (Bank_account). Также все определения должны собираться в особый файл - заголовочный. Он имеет расширение .h

Пусть наш заголовочный файл будет называться bank.h. Тогда мы помещаем определение нашего класса в этот файл:

//bank.h
#pragma once

class Bank_account
{
private:
	int amount;
public:
	Bank_account();
	int Add(int number);
	int Remove(int number);
	void Show_money();
};

Теперь, если мы захотим использовать класс Bank_account нам нужно будет подключить заголовочный файл “bank.h”. Для определений создадим файл исходного кода def.cpp и поместим туда все определения методов из класса.

//def.cpp
#include "bank.h" // обратите внимание, что здесь кавычки
#include <iostream>

using namespace std;

Bank_account::Bank_account() // конструктор
{
	amount = 0;
}

int Bank_account::Add(int number)
{
	amount += number;
	return amount;
}

int Bank_account::Remove(int number)
{
	amount -= number;
	return amount;
}

void Bank_account::Show_money()
{
	cout << "Current amount: " << amount << endl;
}

Теперь в главном файле нам достаточно подключить “bank.h”. Как же нам теперь использовать данный класс? Это достаточно просто, создаем объект класса Kate (по легенде, Kate открыла счет в банке, и этот счет называется её имененм). Теперь используем методы класса, также как мы это делали с обычными функциями.

// main.cpp
#include <iostream>
#include "bank.h"

using namespace std;

int main()
{
	Bank_account Kate;
	Kate.Add(20);
	Kate.Show_money();
	Kate.Add(50);
	Kate.Show_money();
	Kate.Remove(70);
	Kate.Show_money();

	return 0;
}

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

Как вы видите, классы - это достаточно мощный инструмент в языках программирования. В данной статье были рассмотрены базовые понятия ООП, и теперь вы и сами в состоянии двигаться дальше.