Команда (фрилансеры)

Набираем команду фрилансеров, Вы:

  • Программист,
  • Дизайнер,
  • SEO-специалист,
  • Менеджер

Разработка на заказ

Наша команда фрилансеров выполнит
работы на заказ:

Создание и раскрутка сайтов
Разработка приложений (мобайл, десктоп, сервер)
Разработка игр (веб, мобайл, 3D)
Аутсорсинг, фриланс

Контакты
vk.com/sitev_ru
Skype: sitev.ru
E-mail: mike@sitev.ru
github.com/sitev

Рейтинг@Mail.ru

Besucherzahler
счетчик посещений
Сайт на C++
Наш сайт работает на C++ и это очень круто! =))

Классы в C++. Урок 8

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

Зачем нужны классы в C++?

Алан Кей, который придумал ООП, был по образованию не только математиком, но и биологом.

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

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

Понятия: класс и объект в C++

Для чего нужны классы? Приведём аналогии. Представим, что нам нужно написать программу учета успеваемости студентов. Понятие студента абстрактное - это общее описание человека, обучающегося в учебном заведении. Студент - это класс ООП. Экземпляры этого класса, конкретные люди: Аня, Маша и Наташа - объекты. В этом случае класс - это описание объектов.

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

Каждый студент имеет свои ФИО, пол, возраст, а каждый автомобиль имеет - марку, модель, цвет и другие составляющие - это свойства класса. Классы имеют свои функции, которые называются методами класса. Например, для студента методами будут учиться, получать отметки, а для автомобиля - ехать, повернуть, остановиться.

Вот так класс Student (студент) описывается в С++:

class Student { // Класс студент
	auto fio; // свойство ФИО
	auto sex; // свойство пол
	auto age; // свойство возраст
	void learn(); // метод учиться
	void getMark(); // метод получить оценку
};

А вот пример класса Car (автомобиль) на C++:

class Car {
	auto mark; // свойство марка
	auto model; // свойство модель
	auto color; // свойство цвет
	void go(); // метод ехать
	void turn(); // метод повернуть
	void stop(); // метод остановиться
};

Для упрощения, привожу типы auto и void.

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

Классы описали, как теперь создать объекты? Да очень просто!

В статической памяти:

Student anya, masha, natasha;
Car lada, ferrari;
В динамической памяти:
Student *anya = new Student();
Student *masha = new Student();
Student *natasha = new Student();
Car *lada = new Car();
Car *ferrari = new Car();

Три кита ООП

В ООП существует три основных принципа построения классов:

  • Инкапсуляция (лат. in capsula - в оболочке) — объединяем в классе данные и методы, скрываем детали реализации от пользователя
  • Наследование — порождаем новый класс-потомок на основе уже существующего, все свойства и методы класса-родителя присваиваются классу-потомку
  • Полиморфизм — методы с одним названием для объектов различных классов имеют различную реализацию

Приведём пример:

class Shape { // класс Фигура
	auto color; // свойство цвет
	void paint(); // метод рисовать
};

class Circle : Shape { // Объявляем класс Circle (круг) и порождаем его от Shape
	void paint() {
		// рисуем круг
	}
};

class Rectagle : Shape { // Объявляем класс Rectangle (прямоугольник) и порождаем его от Shape
	void paint() {
		// рисуем прямоугольник
	}
};

Свойство color и метод paint() размещены вместе в классе Shape - это инкапсуляция. Порождаем класс Circle от Shape и Rectagle от Shape - это наследование. Метод с одним название paint() для различных классов Circle и Rectagle имеет различную реализацию - это полиморфизм.

Модификаторы доступа

Создавая классы, как мы это делали выше, свойства и методы никому, кроме этого класса недоступны. Мы какбы по-умолчанию применяли модификатор доступа private.

class Shape {
private:
	auto color;
	void paint();
};

Теперь мы хотим чтобы свойство color было доступно только потомкам класса Shape, а метод paint() - всем, не разбирая, кому угодно. Для этого применяются модификаторы protected и public соответственно.

class Shape {
protected:
	auto color;
public:
	void paint();
private:
	int temporary; // Cоздали для примера, доступна только в этом классе
};

Геттеры и Сеттеры

Инкапсуляция в C++ предполагает, что мы не только объединяем в классе данные и методы, но и скрываем детали реализации от пользователя. Под этим подразумевается, что мы не должны переменные помещать в public.

Например, мы хотим в чайник Teapot залить воды water, чтобы вскипятить его, и если в классе будет доступна переменная water, мы может случайно залить хоть весь океан :) Поэтому, код класса должен содержать проверку на такую ситуацию.

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

Напишем пример нашего чайника:

class Teapot {
private:
	int water;
public:
	int getWater() {
		return water;
	}
	void setWater(int value) {
		if (value >= 0 && value <= 2000) water = value; // Залить в чайник, не больше 2 литров воды
	}
};

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

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

Деструктор - также специальная функция, которая вызывается при уничтожении объекта. Имя деструктора обязательно должно совпадать с именем класса, только в начале ставится знак тильды ~. Деструктор не имеет входных параметров.

Приведём пример:

class Teapot {
public:
	Teapot();
	~Teapot();
}

Ну вот, пожалуй, и всё! В эту статью, я, можно сказать, вложил всю свою душу и весь свой многолетний опыт (плюс понадёргал информацию из других источников :) ), так как являюсь ярым поклонником парадигмы ООП! Читайте внимательно, пытайтесь понять, осмыслить, переосмыслить, не бойтесь перечитывать по нескольку раз - ну очень пригодится в дальнейшем при разработки программ!


Отправить комментарий
Наш проект: язык Cj
Cj - язык программирования (C++ & Javascript)
Новый язык программирования, для разработки веб, мобайл, десктоп-приложений, игр... подробнее...

Хотите поддержать проект?

  • Оставляйте ссылки на наш сайт
  • Станьте спонсором проекта
подробнее...

Концепция SITEV.ru

SITEV.ru - это социальная сеть для ИТ-специалистов (программистов, дизайнеров, seo-специалистов, рекламных менеджеров, маркетологов), в том числе фрилансеров, бизнесменов... а также обычных пользователей, для которых и делается ИТ

Реклама


Поиск работы по всему миру