Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Язык программирования Сpp 25.09.11 (2).doc
Скачиваний:
16
Добавлен:
19.08.2019
Размер:
10.09 Mб
Скачать

Int done;/*переменная, которая информирует о конце списка файлов */

cout<<"Directory listing of *.*\n";

done = findfirst("*.*",&ff,0);//функция из dir

while (!done) /* здесь используются логические переменные

в стиле С */

{

cout<< ff.ff_name<<" "<<ff.ff_fsize<<"\n";

done = findnext(&ff);

}

return 0;

}

6. Объединения

В языке С++ используются типы довольно похожие на структуры. Эти типы называются объединения. Можно сказать, что объединение это частный случай структуры. Формат описания точно такой же, но вместо слова struct используется union.

Разница между структурой и объединением заключается в способе хранения их элементов. В структуре все ее элементы занимают последовательные ячейки необходимой длины. Для объединения отводится одна ячейка размером равном размеру поля с наибольшей длиной, но в каждый момент времени в переменной типа объединение хранится только одно значение. Говоря иначе, объединение – это область памяти, в которой в разные моменты времени могут находиться объекты разных типов. В любой момент времени объединение может содержать максимум один объект. На программиста возлагается обязанность следить за тем, чтобы к данным в объединении обращались по имени элемента соответствующего типа данных.

Рассмотрим пример в котором нужно указать способ оплаты - картой или чеком.

#include<iostream.h>

#include<windows>

void main(){

enum paytype{CARD,CHECK};

paytype type;

union payment{

char card[25];//Имя карты

long check;} //Номер чека

Info;//Обявление переменной типа объединение

type=CARD;

SetConsoleOutputCP(1251);

cout<<"Введите ifo.card:";

cin.getline(info.card,25);

cout<<"Введите info.check:";

cin>>info.check;

switch(type){

case CARD: cout<<info.card<<endl;break;

case CHECK: cout<<info.check<<endl;break;

}

char z;

cin>>z;

}

Вот результат

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

/////////////////////////////////////////////////////////////

#include<iostream.h>

#include<windows>

void main(){

enum paytype{CARD,CHECK};

paytype type;

union payment{

char card[25];//Имя карты

long check;} //Номер чека

Info;//Обявление переменной типа объединение

type=CARD;

SetConsoleOutputCP(1251);

cout<<"Введите info.check:";

cin>>info.check; /*В данном случае происходит обращение к элементу, который был последним размещен в памяти*/

cout<<"Введите ifo.card:";

cin.getline(info.card,25);

switch(type){

case CARD: cout<<info.card<<endl;break;

case CHECK: cout<<info.check<<endl;break;

}

char z;

cin>>z;

}

7. Объектно-ориентированное программирование

Программирование в том виде, в котором мы его описали, принято называть процедурным программированием. Название объясняется тем, что во многих языках функция называется процедурой. Вершиной такого рода программирования явилось применение функций (процедур). В начале 90-х годов стала внедряться идея так называемого объектно-ориентированного программирования (ООП). Это позволило использовать созданные ранее программы как типы данных, осуществлять наследование свойств. Об этом и многом другом мы расскажем в этой главе.

Нужно отметить, что превосходство ООП заметно только при разработке достаточно больших и сложных программ, поэтому все достоинства такого подхода в рассмотренных ниже примерах далеко не очевидны. Больше того ООП, как правило, неэффективно применительно к небольшим программам.