Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Прототип






Прототип — это объект-образец, по образу и подобию которого создаются другие объекты. Объекты-копии могут сохранять связь с родительским объектом, автоматически наследуя изменения в прототипе; эта особенность определяется в рамках конкретного языка.

 

КЛАССЫ И ИХ ОБЪЯВЛЕНИЕ

class Students {

// Имя студента

std:: string name;

// Фамилия

std:: string last_name;

// Пять промежуточных оценок студента

int scores[5];

// Итоговая оценка за семестр

float average_ball;

};

Основные понятия

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

 

У каждого студента есть имя — name и фамилия last_name. Также, у него есть промежуточные оценки за весь семестр. Эти оценки мы будем записывать в целочисленный массив из пяти элементов. После того, как все пять оценок будут проставлены, определим средний балл успеваемости студента за весь семестр — свойство average_ball.

Методы — это функции, которые могут выполнять какие-либо действия над данными (свойствами) класса. Добавим в наш класс функцию calculate_average_ball(), которая будет определять средний балл успеваемости ученика.

· Методы класса — это его функции.

· Свойства класса — его переменные.

 

class Students { public: // Функция, считающая средний балл void calculate_average_ball() { int sum = 0; // Сумма всех оценок for (int i = 0; i < 5; ++i) { sum += scores[i]; } // считаем среднее арифметическое average_ball = sum / 5.0; } // Имя студента std:: string name; // Фамилия std:: string last_name; // Пять промежуточных оценок студента int scores[5]; private: // Итоговая оценка за семестр float average_ball; };

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

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

Обычно, приватными делают все свойства класса, а публичными — его методы. Все действия с закрытыми свойствами класса реализуются через его методы. Рассмотрим следующий код.

class Students { public: // Установка среднего балла void set_average_ball(float ball) { average_ball = ball; } // Получение среднего балла float get_average_ball() { return average_ball; } std:: string name; std:: string last_name; int scores[5]; private: float average_ball; };

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

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

 

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 < < " Memory has been cleaned. Good bye." < < std:: endl; }}; int main(){ Students *student = new Students; // Уничтожение объекта delete student; return 0; }

 

Определение класса должно располагаться до main.

Начнём с простых примеров:

код на языке c++

class soldier

{

public:

int x, y;

int ammo;

};

В данном примере определение класса почти идентично определению структур. Есть только два отличия: в заголовке вместо ключевого слово struct стоит class. Второе - в первой строке определения класса стоит public с двоеточием. Вот с public мы разберёмся совсем скоро. Сначала же создадим переменную типа soldier.

soldier a;

a.x = 3;
a.y = 4;
a.ammo = 5;

Здесь мы создали объект a класса soldier. Смотрите, совсем никаких отличий от структурных переменных. В данном случае объекты (переменные классов) можно использовать также как и структурные переменные.

 

код на языке c++

class soldier

{

private:

int x, y;

 

public:

void move(int dx, int dy)

{

x += dx;

y += dy;

}

};

У нас нет доступа к переменным x, y. Но они доступны внутри класса. Метод move также имеет к ним доступ, так как он является методом класса soldier.

Теперь, изменить x и y можно только с помощью метода move. x и y скрыты. И это очень правильно. Понять, почему это правильно, мы сможем не скоро - только когда начнём работать с большими классами.
Конструктор класса

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

soldier a = {0, 0};

Но тут компилятор выдаст ошибку: дескать, чтож это ты друг пытаешься получить доступ к скрытым данным?

Если вы попытаетесь следующий способ:

код на языке c++

class soldier

{

private

int x = 0;

int y = 0;

};

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

Итак, в каждом классе есть специальная функция, которая вызывается каждый раз когда создаётся объект класса. Это функция называется конструктором класса. Если вы явно не создаёте конструктор, то компилятор вызывает конструктор по умолчанию.

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

 

код на языке c++

class soldier

{

private:

int x, y;

 

public:

soldier () // конструктор

{

x = 0; // инициализация переменных

y = 0;

}

 

void move (int dx, int dy)

{

x += dx;

y += dy;

}

};

Конструктор вызывается при создании объектов класса:

soldier a, b;

Здесь для обоих объектов a и b вызывается конструктор.

Возможна и такая форма записи:

soldier a(), b();

Здесь как бы намекается, что при создании a и b вызывается функция (конструктор).

Кстати! Конструкторы вызываются не только для пользовательских типов данных, но и для стандартных. Например, при определении переменной типа char вызывается соответствующий конструктор. При этом данный конструктор выделяет память под переменную - один байт.

 

Вот как выглядит определение конструктора класса soldier со списком инициализации:

soldier (): x(0), y(0), ammo(100)
{}

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

 

МЕТОДА КЛАССА

 

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

Методы — это функции, которые могут выполнять какие-либо действия над данными (свойствами) класса. Добавим в наш класс функцию calculate_average_ball(), которая будет определять средний балл успеваемости ученика.

· Методы класса — это его функции.

· Свойства класса — его переменные.

 

class Students { public: // Функция, считающая средний балл void calculate_average_ball() { int sum = 0; // Сумма всех оценок for (int i = 0; i < 5; ++i) { sum += scores[i]; } // считаем среднее арифметическое average_ball = sum / 5.0; } // Имя студента std:: string name; // Фамилия std:: string last_name; // Пять промежуточных оценок студента int scores[5]; private: // Итоговая оценка за семестр float average_ball; };

КОНСТРУКТОРЫ И ДЕСТРУКТОРЫ

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

  • Конструктор представляет собой метод класса, который облегчает вашим программам инициализацию элементов данных класса.
  • Конструктор имеет такое же имя, как и класс.
  • Конструктор не имеет возвращаемого значения.
  • Каждый раз, когда ваша программа создает переменную класса, C++ вызывает конструктор класса, если конструктор существует.
  • Многие объекты могут распределять память для хранения информации; когда вы уничтожаете такой объект, C++ будет вызывать специальный деструктор, который может освобождать эту память, очищая ее после объекта.
  • Деструктор имеет такое же имя, как и класс, за исключением того, что вы должны предварять его имя символом тильды (~).
  • Деструктор не имеет возвращаемого значения.





© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.