Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Типы данных языка c



Все данные, используемые в программе, можно разделить на две группы: константы и переменные. К первой группе относятся данные, не изменяющие своего значения в ходе выполнения программы, данные второй группы могут изменять свое значение.

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

Простые (скалярные) типы:

Составные (структурированные) типы:

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

Целые и вещественные переменные предназначены для хранения чисел, символьные переменные – это также числовые переменные, они хранят ASCII коды символов.

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

Массив – это группа элементов одинакового типа (double, float, int и т. п.). Из объявления массива компилятор должен получить информацию о типе элементов массива и их количестве.

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

10.Основные конструкции языка С++.

Конструкции принятия решений позволяют программисту проверять условия и выбирать направление действий.
Одним из видов конструкции принятия решений являются циклы.
В С ++ применяются:
•одноальтернативный оператор if.
•двухальтернативный оператор if-else.
•многоальтернативный оператор switch
•вложенные конструкции принятия решений
•операторы try, catch и throw
•оператор цикла for
•оператор цикла do-while
•оператор цикла while
•пропуск итерации
•выход из циклов
•вложенные циклы
Одноальтернативный оператор условия if.
if <условие> оператор; - простая форма
if number < 0 number = 0;
Составная форма:
If (условие)
{
< последовательность операторов>
}

Пример:

If ((heigth-54)<3)
{
area = length * width;
volume = area * hight;
}

Пример программы:

//Программа, демонстрирующая
//одноальтернативный оператор if

# include
int main ()
{
double x;
cout << "Введите номер";
cin >>x;
if (x:=0)
cout << "обратное значение" << x
<< "равно" << (1/x)<< endl;
return 0;
}

Двухальтернативный оператор условия if-else.
Двухальтернативный оператор if-else обеспечивает два альтернативных направления действий в зависимости от значения проверяемого булева условия.

If (условие)
{
<последовательность оператор1>
}
else
{
< последовательность оператор2>
}
Примеры:
if (i >j)
{ i=i+1;
cout << "большее i" << i;
}
else
cout << "большее j" << j;
//Программа, демонстрирующая двухальтернатив-//ность оператора if
# include < iostream. h>
# include
int main ()
{
char c;
cout << "введите символ:";
cin >> c;
//преобразование в прописную букву
c= toupper (c);
if (c > = "A" & & c < = "z")
cout << "Прописная буква"<< c << endl;
else
cout <<"Вы ввели не букву"<< endl;
return 0;
}
Toupper - преобразует значение литеры в верхний
регистр. Прототип этой функции находится в файле
заголовка CTYPE.И.
Многоальтернативный оператор условия IF - ELSE.
If (условие1) <оператор1>;|<последов.опер.1>
Else if (условие2) <оператор2>;
...
else if (условие n)<оператор n1>;
else <оператор n2>;
Пример:
char op;
int op ok =1;
double x, y, z;
cout << "Введите x, op, y:" <<;
cin >> x >> op >> y;
if (op = = "+") z = x+y;
else if (op = = "-") z = x-y;
else if (op = = "*") z= x*y;
else if (op = = "/ " & & y:=0)
z = x/y;
else op ok =0;
else z = x/y;
op ok =0;
Многоальтернативный оператор IF-ELSE выполняет ряд последовательных проверок до тех пор, пока не произойдет одно из следующих событий:
- одно из условий в предложении if или в предложении else if имеет значение true. В этом случае выполняются соответствующие операторы.
- ни одно из проверяемых условий не имеет значения true. Программа выполняет операторы во всеохватывающем предложении else (если оно существует).
Оператор SWITCH.
Оператор switch предлагает специальную форму создания многоальтерна-тивного решения. Это позволяет вам исследовать разнообразные значения выра-жения (тип которого совместим с целым) и выбирать соответствующее направле-ние действия.

switch (выражение)
{
case constant 1_1:
[case constant 1_2:...]
<один или несколько операторов>
break;
case constant 2_1:
[case constant 2_2:...]
<один или несколько операторов>
break;
...
case constant N_1:
[case constant N_2:...]
<один или несколько операторов>
break;
default:
<один или несколько операторов>
break;
}
Пример:
ок = true;
switch (op)
{
case "+":
Z = x + y;
break;
case "-":
Z= x - y;
break;
case "*":
Z = x * y;
break;
case "/":
if (y: =0) z = x / y;
else
ok = false;
break;
default:
ok = false
break;
}
Правила использования оператора SWITCH сводятся к следующему:
1. SWITCH требует совместимого с целым значения. Это значение может быть константой, переменной, вызовом функции или выражением. Оператор SWITCH не работает с типами данных с плавающей точкой.
2. Значение после каждой метки case должно быть константой.
3. С++ не поддерживает метки case c диапазоном значений. В этом случае каждое значение из диапазона должно появляться с отдельной меткой case.
4. Окончание оператора case обычно отмечается словом break. Это вызывает пе-реход к выполнению первого оператора, который следует после SWITCH. Если break не включен, то выполнение будет продолжаться со следующего опера-тора case.
5. Предложение default - всеохватывающее, но оно не обязательно, если вы хо-тите проверить только отдельный ряд случаев.
6. Ряд операторов в каждой метке case или в групповых метках case можно не за-ключать в фигурные скобки.

Пример: задача классификации вводимого символа.
# include
int main ()
{
char c;
cout << "Введите символ";
сin >> с;
switch (c)
{
case "A":
case "B":
case "C":
case "D":
// другие метки case
сout << " Это заглавные символы " <<еndl;
break;
case "a":
case "b":
case "c":
case "d":
// другие метки case
сout << " Это строчные символы"
<< lnde;
b uar;
Case "0":
Case "1":
Case "2":
Case "3":
// Другие метки case
c out << " Это литеры -цифр " << end l;
break;
default;
c out <<" Вы ввели служебный сим."
<< end l;
break;
return 0;
}
Вложенные конструкции принятия решения.
Выше рассмотренную задачу можно решить используя только условные оператор.
// Пр-ма демонстрирует вложенным
//оперamop if:
# include < iostream. h >
int main ()
{
char c;
cout << " Введите символ " >> end l;
cin >>c;
if ((c > = "A" && c> ="z") // (c >="a" && c< = "z"))
if (c> ="A" && c<="z")
cout << " Это заглавные буквы " cout << "Это строчные буквы " << end l;
count << "Это не буквы" << endl;
return 0;
}
Обработка особых ситуаций.
Обработка особых ситуаций (исключений) была введена в стандарт ANSI/ISO C++ как способ обойти программным путем неожиданно возникшие проблемы, а также как средство, обеспечивающее универсальный метод обработ-ки ошибок. До введения исключений бывало иногда трудно отличить ошибку от правильного результата. Это особенно верно по отношению к значениям, возвра-щаемым из функции и по отношению к конструкторам класса.
Механизм исключений вращается вокруг размещения операторов, которые могли бы генерировать ошибку времени исполнения в специальном пробном бло-ке (try-блоке). За этим блоком следует один или более блоков захвата (catch-блоков), которые идентифицируют и обрабатывают ошибки, генерируемые в пробном блоке.
Пробный блок и блок захвата.
Пробный блок:
try
{//Здесь размещается код, который может
//генерировать исключения}
}
Блок захвата:
catch (T1[x1])
{//обрабатывает тип исключений Т1
}
[ catch (T2 [x2])
{ //обрабатывает тип исключений Т2
}
]
[др. блоки захвата]
[catch (...)
{
// обрабатывает оставшиеся типы исключений
}
]

Типы Т1 и Т2 - специальные типы, которые поддерживают исключения, опреде-ленные пользователем. Параметр x1 может иметь тип Т1, Т1&, const T1 и const T1&. Параметр Т2 может иметь такие же варианты для типа Т2. Последний блок захвата использует многоточие, чтобы показать, что это блок, захватывающий все.
try
{
// Do something to a file
Do something ("filename ext");
}
catch (char * str)
{
cout << " Co uldn"t" << str<< endl;
}
catch (...)
{
cout <<"Unknown exeption" <}

Приведенный пример содержит блок, который пытается вызвать функцию для манипуляции файлами с именем FILEAME. Ext Эта функция выбрасывает (т.е. генерирует) исключение. Блок захвата обрабатывает исключение типа char* путем отображения сообщения об ошибке, которое содержится в строке, сгенери-рованной исключением. Последний блок захвата использует многоточие, а не тип исключения. Это позволяет обрабатывать особые ситуации, которые вы даже не ожидаете; любая особая ситуация, для которой вы не специфицировали тип, ока-зывается обработанной в этом всеохватывающем блоке.
Особая ситуация - это ошибка времени выполнения. Выбросить исключе-ние /to throw an exeption/ означает генерировать ошибку времени выполнения.
Ключевое слово throw.
throw /(exception Instance);
The exception Instance - экземпляр структуры или клана исключений.
Пример:
try
{ int rslt;
it ("(rslt = DoSomething (filename)))
throw "do something";
if (rslt >= 100)
throw rslt;
}
catch (char * str)
}
cout << "Couldn"t " << str << endl;
}
catch (int i)
{
cout << "Result was too high " << i << endl;
}
Приведённая функция вырабатывает экземпляр исключений каждый раз, когда она наталкивается на ошибку. Заметьте, что используется тип char*. Это указатель на символ, представляющий собой один из способов работы со строка-ми в С++.


ВОПРОС 26 (2)

Объектно-ориентированное программирование. Понятие класса и экземпляра. Данные и методы класса. Открытые, защищенные и закрытые данные. Конструкторы и деструкторы. Перегрузка операций языка. Иерархия классов. Наследование. Родство типа ЕСТЬ и типа ИМЕЕТ. Абстрактные классы и чистые виртуальные функции. Множественное наследование. Виртуальное наследование. Примеры.

Общие замечания

Объектно-ориентированная парадигма программирования не нова. Её истоки восходят к Симуле-67, хотя первая впервые она была полностью реализована в Smalltalk-80. ООП (Объектно-ориентированное программирование) приобрело популярность во второй половине 80-х вместе с такими языками, как С++, Objective C (другое расширение C), Object Pascal и Turbo Pascal, CLOS (обектно-ориентированное расширение Lisp'a), Eiffel, Ada (в её последних воплощениях) и недавно — в Java. Внимание сосредоточено на C++, Object Pascal и Java, иногда упоминаются и другие языки.

Ключевые черты ООП хорошо известны:

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

2. Вторая ключевая черта, — наследование — способ определения нового типа, когда новый тип наследует элементы (свойства и методы) существующего, модифицируя или расширяя их. Это способствует выражению специализации и генерализации.

3. Третья черта, известная как полиморфизм, позволяет единообразно ссылаться на объекты различных классов (обычно внутри некоторой иерархии). Это делает классы ещё удобнее и облегчает расширение и поддержку программ, основанных на них.

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

Алан Кей в свое время вывел пять основных черт языка Smalltalk — первого удачного ОО языка:

1. Все является объектом. Объект как хранит информацию, так и способен ее преобразовывать. В принципе любой элемент решаемой задачи (дом, собака, услуга, химическая реакция, город, космический корабль и т. д.) может представлять собой объект. Объект можно представить себе как швейцарский нож: он является набором различных ножей и «открывашек» (хранение), но в то же самое время им мы можем резать или открывать что-либо (преобразование).

2. Программа — совокупность объектов, указывающих друг другу что делать. Для обращения к одному объекту другой объект «посылает ему сообщение». Как вариант возможно и «ответное сообщение». Программу можно представить себе как совокупность к примеру 3 объектов: писателя, ручки и листа бумаги. Писатель «посылает сообщение» ручке, которая в свою очередь «посылает сообщение» листу бумаги — в результате мы видим текст (посыл сообщения от листа к писателю).

3. Каждый объект имеет свою собственную «память» состоящую из других объектов. Таким образом программист может скрыть сложность программы за довольно простыми объектами. К примеру, дом (достаточно сложный объект) состоит из дверей, комнат, окон, проводки и отопления. Дверь, в свою очередь, может состоять из собственно двери, ручки, замка и петель. Проводка тоже состоит из проводов, розеток и, к примеру, щитка.

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

5. Все объекты одного типа могут получать одинаковые сообщения. К примеру у нас есть 2 объекта: синяя и красная кружки. Обе разные по форме и материалу. Но из обеих мы можем пить (или не пить, если они пустые). В данном случае кружка — это тип объекта.

Самое лаконичное описание объекта предложил Буч: «Объект обладает состоянием, поведением и индивидуальностью».

Класс — разновидность абстрактного типа данных в объектно-ориентированном программировании (ООП), характеризуемый способом своего построения

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

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

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

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





Дата публикования: 2015-01-26; Прочитано: 403 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.01 с)...