Типы данных языка С++

Содержание

Слайд 2

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

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

Часто бывает удобно, чтобы функции, реализующие один и

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

Введение в объектно-ориентированное программирование Рассмотрим пример известной функции swap, меняющую местами

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

Рассмотрим пример известной функции swap, меняющую местами значения

своих аргументов.
void swap(int &a, int &b)
{
int temp;
temp = a;
a = b;
b = temp;
}
Слайд 4

Введение в объектно-ориентированное программирование Эта функция работает с целым типом данных,

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

Эта функция работает с целым типом данных, ее

можно перегрузить для других типов, указав эти типы в качестве параметров. Например, для вещественных чисел или символов.
void swap(double &a, double &b)
{
double temp;
temp = a;
a = b;
b = temp;
}
Слайд 5

Введение в объектно-ориентированное программирование void swap(char &a, char &b) { char

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

void swap(char &a, char &b)
{
char temp;
temp = a;
a

= b;
b = temp;
}
Слайд 6

Введение в объектно-ориентированное программирование В рассмотренном примере есть три функции с

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

В рассмотренном примере есть три функции с одинаковыми

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

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

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

конкретный экземпляр функции. Как уже было сказано, перегрузка

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

Введение в объектно-ориентированное программирование Дальнейшим развитием перегружаемых функций стали шаблоны функций,

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

Дальнейшим развитием перегружаемых функций стали шаблоны функций, которые

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

Введение в объектно-ориентированное программирование Общий формат шаблона функции следующий: template тип_рез_та

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

Общий формат шаблона функции следующий:
template тип_рез_та
имя_функции(список аргументов)
{
//

тело функции
}
Слайд 10

Введение в объектно-ориентированное программирование Ключевое слово template сообщает компилятору, что это

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

Ключевое слово template сообщает компилятору, что это не

просто функция, а шаблон функции. Слово class в данном контексте заменимо на слово typename. В угловых скобках указывается список шаблона. Количество типов в списке стандартом не ограничено, перечисляются они через запятую. Далее идет определение подобное определению обычной функции.
Слайд 11

Введение в объектно-ориентированное программирование Теперь вернемся к перегруженным функциям swap ,

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

Теперь вернемся к перегруженным функциям swap , реализуя

их через единственный шаблон:
template
void swap(Type &a, Type &b)
{
Type temp;
temp = a;
a = b;
b = temp;
}
Область действия типа Type только в пределах данного блока.
Слайд 12

Введение в объектно-ориентированное программирование Теперь, вместо трех функций у нас есть

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

Теперь, вместо трех функций у нас есть одно

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

Введение в объектно-ориентированное программирование Разработчики языка С++ пошли еще дальше –

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

Разработчики языка С++ пошли еще дальше – параметризировали

тип. Речь идет о шаблонах классов. Для понимания сути шаблонных классов, вернемся к определению обычного класса:
class Integer
{
protected:
int item;
public:
Integer(){};
Integer(int i):item(i){};
Слайд 14

Введение в объектно-ориентированное программирование Integer(const Integer &); ~Integer(){} Integer operator -(const

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

Integer(const Integer &);
~Integer(){}
Integer operator -(const Integer&);
bool operator <(const

Integer &);
Integer &operator =(const Integer &);
friend ostream &operator <<(ostream &, const Integer &);
};
Слайд 15

Введение в объектно-ориентированное программирование В этом классе одно единственное поле int

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

В этом классе одно единственное поле int item;

целого типа. Может появиться необходимость в аналогичном классе, но содержащим поле типа double, char или bool. Можно создать три отдельных класса, а можно воспользоваться услугами шаблонного класса, создав единственный шаблон.
Слайд 16

Введение в объектно-ориентированное программирование Пример такого подхода: template class Number {

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

Пример такого подхода:
template
class Number
{
protected:
Type item;
public:
Number(){};
Number(Type i):item(i){};
Number(const Number&);
~Number(){}
Number

operator -(const Number&);
bool operator <(const Number &);
Integer &operator =(const Number &);
friend ostream &operator << <>(ostream &, const Number&);
};
Слайд 17

Введение в объектно-ориентированное программирование Шаблоны классов очень часто используются в практическом

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

Шаблоны классов очень часто используются в практическом программировании.

Силами разработчиков была создана стандартная библиотека шаблонов (STL), используемая во многих приложениях.
Слайд 18

Типы данных языка С++ Концепция типов данных Отметим сразу, что язык

Типы данных языка С++

Концепция типов данных
Отметим сразу, что язык С++ является

строго типизированным языком, то есть, любой объект данных, объявленный в программе, должен принадлежать какому-либо типу.
Суть любой программы состоит в обработке данных. Данные различных типов обрабатываются по-разному.
Слайд 19

Типы данных языка С++ Типы данных определяют: внутреннее представление данных в

Типы данных языка С++

Типы данных определяют:
внутреннее представление данных в программе;
множество значений,

которые могут принимать величины (переменные, объекты) данного типа;
операции (функции) , применимые к величинам данного типа.
Слайд 20

Типы данных языка С++ Все типы языка делят на основные и

Типы данных языка С++

Все типы языка делят на основные и составные.

В языке С++ есть шесть основных (стандартных) типов, на основе которых строятся описания составных (пользовательских) типов.
Слайд 21

Типы данных языка С++ Основные типы данных Основные (стандартные) типы часто

Типы данных языка С++

Основные типы данных
Основные (стандартные) типы часто называют арифметическими,

поскольку их можно использовать в арифметических операциях. Для их описания используются следующие ключевые слова:
int – целый тип;
char – символьный тип;
Слайд 22

Типы данных языка С++ wchar_t – расширенный символьный тип; bool –

Типы данных языка С++

wchar_t – расширенный символьный тип;
bool – логический тип;
float

– вещественный тип;
double – вещественный с двойной точностью.
Существует четыре спецификатора, уточняющих внутренне представление и диапазон значений величин:
short – короткий;
long – длинный;
Слайд 23

Типы данных языка С++ signed – знаковый; unsigned – беззнаковый. Целый

Типы данных языка С++

signed – знаковый;
unsigned – беззнаковый.
Целый тип (int)
Стандартом языка

С++ не оговаривается размер типа int. Он зависит от разрядности процессора и версии компилятора.
С определенной точностью можно сказать, что под данные этого типа компилятор выделяет 4 (четыре) байта.
Слайд 24

Типы данных языка С++ Спецификатор short перед именем типа указывает компилятору,

Типы данных языка С++

Спецификатор short перед именем типа указывает компилятору, что

под объект выделяется 2 (два) байта.
Внутреннее представление величин целого типа – это целое число в двоичном представлении, старший разряд которого обозначает знак числа (0 – положительные числа, 1 – отрицательные). По умолчанию числа считаются знаковыми ( signed).
Слайд 25

Типы данных языка С++ Спецификатор unsigned предназначен для обозначения без знаковых

Типы данных языка С++

Спецификатор unsigned предназначен для обозначения без знаковых положительных

чисел.
Символьный тип (char)
Под величины этого типа компилятор всегда выделяет один байт. Этого достаточно для размещения 256-символьного набора ASCII.
Символы по сути это целые числа в диапазоне от -128 до 127 или от 0 до 255.
Слайд 26

Типы данных языка С++ Расширенный символьный тип (wchar_t) Предназначен для работы

Типы данных языка С++

Расширенный символьный тип (wchar_t)
Предназначен для работы с символами

для кодировки которых не достаточно 1 байта, например, Unicode. Обычно этот тип занимает 2 байта.
Слайд 27

Типы данных языка С++ Логический тип (bool) Величины этого типа принимают

Типы данных языка С++

Логический тип (bool)
Величины этого типа принимают всего два

значения true (1) или false (0). Для их хранения выделяется один байт.
Слайд 28

Типы данных языка С++ Типы с плавающей запятой (float, double) Стандарт

Типы данных языка С++

Типы с плавающей запятой (float, double)
Стандарт языка предусматривает

три типа данных для хранения вещественных чисел:
float, double и long double. Отличаются они диапазонами представляемых величин и способами хранения их в памяти машины.
В отличие от целочисленных величин, вещественные имеют мантиссу и порядок числа.
Слайд 29

Типы данных языка С++ Типы char, bool и int относятся к целочисленным типам.

Типы данных языка С++

Типы char, bool и int относятся к целочисленным

типам.
Слайд 30

Типы данных языка С++ Типы данных, определяемые пользователем Язык С++ позволяет

Типы данных языка С++

Типы данных, определяемые пользователем
Язык С++ позволяет создавать свои

собственные типы, ориентированные на решение конкретной задачи.
Переименование типов (typedef)
Переименование по своей сути не является определением типа, оно задает типу новое имя, что делает программу более ясной
Слайд 31

Типы данных языка С++ Общий формат переименования следующий: typedef тип новый_тип

Типы данных языка С++

Общий формат переименования следующий:
typedef тип новый_тип [размерность];
Примеры:
typedef unsigned

int UINT;
typedef struct
{
char name[10];
int date;
int group;
} Student;
Слайд 32

Типы данных языка С++ *Перечислимый тип данных (enum) В некоторых случаях

Типы данных языка С++

*Перечислимый тип данных (enum)
В некоторых случаях возникает необходимость

определения конечного множества именованных констант с различными значениями. Для этого можно воспользоваться перечислимым типом данных или перечислением. В перечислении данные задаются списком целочисленных констант.
Слайд 33

Типы данных языка С++ Общий формат перечисления следующий: enum [имя_типа]{список констант};

Типы данных языка С++

Общий формат перечисления следующий:
enum [имя_типа]{список констант};
Имя типа задается

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

Типы данных языка С++ Примеры: enum Color {red, blue, green}; int

Типы данных языка С++

Примеры:
enum Color {red, blue, green};
int main()
{
Color color;
color =

red;
cout << " Color: " << color << endl;
//color = 1; ошибка!!!!
color = static_cast(1);
cout << " Color: " << color << endl;
system("pause");
return 0;
}
Слайд 35

Типы данных языка С++ Следующее объявление задает инициализацию: enum Color {red=3,

Типы данных языка С++

Следующее объявление задает инициализацию:
enum Color {red=3, blue=5, green};
//
color

= green;
cout << " Color: " << color << endl;
// ошибка !!!
// color = 15;
Слайд 36

Типы данных языка С++ К объектам перечислимого типа можно применять все

Типы данных языка С++

К объектам перечислимого типа можно применять все операции,

допустимые к целочисленным типам, например, арифметические:
int var_int(20);
Color color;
color = blue;
cout << var_int+color << endl;
Слайд 37

Типы данных языка С++ Имена перечислимых констант должны быть уникальными, а

Типы данных языка С++

Имена перечислимых констант должны быть уникальными, а значения

могут совпадать.
Еще один пример, объявление логического (булевского) типа:
enum boolean {false, true};
Слайд 38

Типы данных языка С++ Структуры (struct) Структурные объекты или просто структуры

Типы данных языка С++

Структуры (struct)
Структурные объекты или просто структуры в С++

унаследованы из языка С. Отличия есть, и в первую очередь, возможностью определения функций (операций) в теле структуры.
Все компоненты структуры по умолчанию считаются открытыми.
Слайд 39

Типы данных языка С++ Общий формат объявления структуры: struct [name, tag]

Типы данных языка С++

Общий формат объявления структуры:
struct [name, tag]
{
тип_1 поле_1;
тип_2 поле_2;
…………………….
//
прототипы

функций (операций);
}[список_описателей];
Слайд 40

Типы данных языка С++ Элементы структуры, именуемые далее полями могут иметь

Типы данных языка С++

Элементы структуры, именуемые далее полями могут иметь любой

известный компилятору тип, кроме определяемого типа, но могут быть указателем или ссылкой на данный тип. Инициализация полей структуры в момент их определения стандартом языка не разрешена.
Слайд 41

Типы данных языка С++ Пример структуры: struct Student { char Name[20];

Типы данных языка С++

Пример структуры:
struct Student
{
char Name[20];
int Age;
double Mark;
void Show()
{
cout <<

" Name: " << Name << endl;
cout << " Age: " << Age << endl;
cout << " Mark: " << Mark << endl;
}
};
Слайд 42

Типы данных языка С++ В данном примере объявлена единственная функция, позволяющая

Типы данных языка С++

В данном примере объявлена единственная функция, позволяющая просматривать

значение полей экземпляра данного типа.
Объявление объекта (экземпляра) типа структура по следующему формату:
имя_типа имя_объекта [= инициализация];
Слайд 43

Типы данных языка С++ Например, Student st_1; Student st_2 = {"Ivan",

Типы данных языка С++

Например,
Student st_1;
Student st_2 = {"Ivan", 20, 3.4};
Доступ к

компонентам структуры осуществляется с помощью операции доступа ‘.’ , ‘->’,например, st_2.Show();.
Слайд 44

Типы данных языка С++ В С++ помимо структур имеется возможность определять

Типы данных языка С++

В С++ помимо структур имеется возможность определять свои

типы используя классы. Отличие классов от структур в первую очередь в том, что все компоненты класса по умолчанию являются закрытыми (ключевое слово private).
Слайд 45

Типы данных языка С++ Еще одна возможность создание своего собственного типа

Типы данных языка С++

Еще одна возможность создание своего собственного типа –

объединения (смеси). Их формат похож на формат объявления структур, с той лишь разницей, что вместо слова struct используется union.
На внутреннем представлении отличия более значительны, в частности, в объединениях под все поля выделяется одно единственное поле (место) в памяти.
Слайд 46

Типы данных языка С++ Его размер равен размеру поля, занимающему максимальный

Типы данных языка С++

Его размер равен размеру поля, занимающему максимальный объем

в памяти. Пример:
union Student
{
char Name[20];
int Age;
double Mark;
void Show()
{
cout << " Name: " << Name << endl;
cout << " Age: " << Age << endl;
cout << " Mark: " << Mark << endl;
}
};
Слайд 47

Типы данных языка С++ Для представления объекта этого типа потребуется 160

Типы данных языка С++

Для представления объекта этого типа потребуется 160 байт

памяти (20 объектов типа char).
Слайд 48

Типы данных языка С++

Типы данных языка С++

Слайд 49

Типы данных языка С++

Типы данных языка С++

Слайд 50

Типы данных языка С++

Типы данных языка С++

Слайд 51

Типы данных языка С++

Типы данных языка С++