Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
new_Лекции_1-7.docx
Скачиваний:
117
Добавлен:
05.03.2016
Размер:
1.49 Mб
Скачать

Тема 6: Структуры. Классы и объекты. Лекция 6.1. Структуры в языке с. План лекции

  1. Встроенные типы данных

  2. Личные типы данных

  3. Структуры С

  4. Структуры и функции

  5. Примеры использования структур из библиотек

  1. Встроенные типы данных

В C/С++ существуют встроенные простые типы данных (char, int, double и т.д.) Тип переменных говорит о :

  • их размере в памяти;

  • какую информацию они могут хранить;

  • какие действия (операции) можно совершить над ними.

  1. Личные типы данных

Программист может создавать личные типы, используя операторы :

  • typedef – синоним стандартного типа;

  • enum – перечисление;

  • struct – структура, запись;

  • class – класс.

  1. Структуры С

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

// Пример 6.1.1

// Пример программы с простой структурой языка С

#include <iostream>

using namespace std;

// объявление структуры для карандаша

// члены-данные, свойства, поля (data members, properties, fields)

// длина-см.; диаметр-мм.; резинка; цвет; цена; подпись

typedef unsigned short int USHORT;

enum MyColor {Red, Yellow, Green, Blue, Black, Simple};

struct Pencil {

USHORT itsLength;

USHORT itsRadius;

bool itsLastic;

MyColor itsColor;

float itsPrice;

char itsCaption[31];

};

// Главная функция

int main() {

setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста

// объявление структурных переменных(объектов)

//Pencil p; //мусор

Pencil p={140,12,true,MyColor::Red,1.8,"Standard"};//инициализация

// обработка структурных переменных(объектов)

// просмотр сведений

cout << "Длина : " << p.itsLength << endl

<< "Радиус : " << p.itsRadius << endl

<< "Резинка : " << p.itsLastic << endl

<< "Цвет : " << p.itsColor << endl

<< "Цена : " << p.itsPrice << endl

<< "Надпись : " << p.itsCaption << endl << endl << endl;

cin.get();

// определение сведений

p.itsLength=100;

p.itsRadius=10;

p.itsLastic=true;

p.itsColor=MyColor::Black;

p.itsPrice=1.5;

//p.itsCaption="KOHINOR"; // присваивание строк С-стиля -> ошибка

strcpy(p.itsCaption,"KOHINOR");

// просмотр сведений

cout << "Длина : " << p.itsLength << endl

<< "Радиус : " << p.itsRadius << endl

<< "Резинка : " << p.itsLastic << endl

<< "Цвет : " << p.itsColor << endl

<< "Цена : " << p.itsPrice << endl

<< "Надпись : " << p.itsCaption << endl << endl << endl;

cin.get();

return 0;

}

  1. Структуры и функции

Переменные типа структура могут быть параметрами функций. Функции могут возвращать в качестве результата величину структурного типа. Допустимо присваивание структурных переменных.

// Пример 6.1.2

// Пример программы с простой структурой языка С и функциями

#include <iostream>

using namespace std;

// объявление структуры для карандаша

// члены-данные, свойства, поля (data members, properties, fields)

// длина-см.; диаметр-мм.; резинка; цвет; цена; подпись

typedef unsigned short int USHORT;

enum MyColor {Red, Yellow, Green, Blue, Black, Simple};

struct Pencil {

USHORT itsLength;

USHORT itsRadius;

bool itsLastic;

MyColor itsColor;

float itsPrice;

char itsCaption[31];

};

// объявление функций

void ViewPencil(Pencil); // просмотр сведений карандаша

// определение сведений карандаша

Pencil SetPencil(USHORT, USHORT, bool, MyColor,float, char []);

// главная функция

int main() {

setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста

Pencil p1,p2,p3; // объявление структурных переменных(объектов)

// просмотр сведений - мусор

ViewPencil(p1);

ViewPencil(p2);

ViewPencil(p3);

cin.get();

// определение данных

p1=SetPencil(100,8,false,MyColor::Red,0.9,"KOHINOOR");

p2=SetPencil(40,10,true,MyColor::Green,0.25,"FRANCE");

p3=SetPencil(80,6,false,MyColor::Yellow,0.8,"ABCD");

// просмотр сведений

ViewPencil(p1);

ViewPencil(p2);

ViewPencil(p3);

cin.get();

// вычисление средней стоимости

double avg;

avg=(p1.itsPrice + p2.itsPrice + p3.itsPrice)/3.;

cout << "Средняя цена (AVG) =" << avg << endl;

cin.get();

// вычисление количества с резинкой

int k=0;

if (p1.itsLastic == true) k++;

if (p2.itsLastic) k++;

if (p3.itsLastic) k++;

cout << "k=" << k << endl;

cin.get();

// присваивание структур

p1=p2;

// просмотр сведений после присваивания

ViewPencil(p1);

ViewPencil(p2);

cin.get();

return 0;

}

// реализация функций

// просмотр сведений карандаша

void ViewPencil(Pencil p) {

cout << "Длина : " << p.itsLength << endl

<< "Радиус : " << p.itsRadius << endl

<< "Резинка : " << p.itsLastic << endl

<< "Цвет : " << p.itsColor << endl

<< "Цена : " << p.itsPrice << endl

<< "Надпись : " << p.itsCaption << endl << endl << endl;

}

// определение сведений карандаша

Pencil SetPencil(USHORT l, USHORT r , bool la, MyColor c ,float pr, char ca[]) {

Pencil p;

p.itsLength=l;

p.itsRadius=r;

p.itsLastic=la;

p.itsColor=c;

p.itsPrice=pr;

//p.itsCaption=ca; // Ошибка!!!

strcpy(p.itsCaption,ca);

return p;

}

// Пример 6.1.3

// Пример программы с простой структурой языка С и функциями

# include <iostream>

using namespace std;

// структура с данными о сотруднике

struct Sotrudnic {

long int number; // номер

char name[11]; // фамилия

char gender; // пол

int age; // возраст

float weight; // вес

bool smoke; // курит?

float salary; // зарплата

};

// объявление функций

void ToScreen(Sotrudnic s); // вывод данных на экран

Sotrudnic FromKey(); // ввод данных с клавиатуры

// определение данных

Sotrudnic SetSotr(long int, char [], char, int, float, bool, float);

// главная функция

int main() {

setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста

Sotrudnic s1,s2; // s1,s2-структурные переменные (объекты)

// размер структурных переменных

cout << "Размер = " << sizeof(Sotrudnic) << endl; // имя типа

cout << "Размер = " << sizeof(s1) << endl; // имя объекта

// вывод данных на экран - мусор

ToScreen(s1);

ToScreen(s2);

// определение данных

s1=SetSotr(1000,"Ivanov",'m',25,70.5,true,500.5);

s2=SetSotr(2000,"Petrova",'w',22,60.5,false,400.5);

// вывод данных на экран

ToScreen(s1);

ToScreen(s2);

// ввод данных с клавиатуры

s1=FromKey();

s2=FromKey();

// вывод данных на экран

ToScreen(s1);

ToScreen(s2);

// вычисление среднего возраста

float avg=(s1.age + s2.age)/2.;

cout << "Средний возрамт (AVG) =" << avg << endl << endl;;

cin.get();

return 0;

}

// реализация функций

// вывод данных на экран

void ToScreen(Sotrudnic s) {

cout<<"Номер: "<<s.number<<'\n'<<"Фамилия: "<<s.name<<'\n' <<"Пол: "<<s.gender<<endl;

cout<<"Возраст: " <<s.age <<'\n'<<"Вес: " <<s.weight<<" кг."<<'\n'<<"Курение: "<<s.smoke<<endl;

cout<<"Зарплата: "<<s.salary<<"\n\n\n"<<endl;

cin.get();

}

// ввод данных с клавиатуры

Sotrudnic FromKey() {

Sotrudnic s;

cout<<"Номер: "<<endl;

cin>>s.number;

cout<<"Фамилия: "<<endl;

cin>>s.name;

cout<<"Пол: "<<endl;

cin>>s.gender;

cout<<"Возраст: "<<endl;

cin>>s.age;

cout<<"Вес: "<<endl;

cin>>s.weight;

cout<<"Курение?(1-да,0-нет): "<<endl;

cin>>s.smoke;

cout<<"Зарплата: "<<endl;

cin>>s.salary;

return s;

}

// определение данных

Sotrudnic SetSotr(long int tn, char fam [], char p, int a, float w, bool k, float st) {

Sotrudnic s;

s.number=tn;

strcpy(s.name,fam);

s.gender=p;

s.age=a;

s.weight=w;

s.smoke=k;

s.salary=st;

return s;

}

  1. Примеры использования структур из библиотек

Структуры часто используются в библиотеках языка С. В языке С++ обычно применяются не структуры, а классы.

// Пример 6.1.4

// Функции для даты и времени

// tm - структура для работы с датой и временем <time.h>

// struct tm {

// int tm_sec; /* seconds after the minute - [0,59] */

// int tm_min; /* minutes after the hour - [0,59] */

// int tm_hour; /* hours since midnight - [0,23] */

// int tm_mday; /* day of the month - [1,31] */

// int tm_mon; /* months since January - [0,11] */

// int tm_year; /* years since 1900 */

// int tm_wday; /* days since Sunday - [0,6] */

// int tm_yday; /* days since January 1 - [0,365] */

// int tm_isdst; /* daylight savings time flag */

// };

#include <iostream>

#include <time.h>

using namespace std;

// главная функция

void main() {

setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста

time_t currentTime;

time(&currentTime);

cout << "Сегодня - " << ctime(&currentTime) << endl;

cin.get();

time(&currentTime);

struct tm ptm1=*localtime(&currentTime);

cout << "Сегодня - " << ((ptm1.tm_mon)+1) << "/"

<< ptm1.tm_mday << "/" << ptm1.tm_year+1900 << endl;

cout << "Текущее время - " << ((ptm1.tm_hour)) << ":"

<< ptm1.tm_min << ":" << ptm1.tm_sec << endl;

cin.get();

}

// Пример 6.1.5

// Cтруктуры для Windows

#include <iostream>

// заголовки Windows

#include <windows.h>

using namespace std;

// точки

void ViewPoint(POINT);

void ViewPoint(char [],POINT);

POINT CreatePoint(LONG,LONG);

// прямоугольники

void ViewRect (RECT);

void ViewRect(char name [],RECT r);

RECT CreateRect(POINT, POINT);

// главная функция

void main() {

setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста

// точки

POINT p1={0,0};

ViewPoint(p1);

ViewPoint("p1",p1);

cin.get();

POINT p2;

p2.x=100;

p2.y=100;

ViewPoint("p2",p2);

cin.get();

POINT p3=CreatePoint(300,500);

ViewPoint("p3",p3);

cin.get();

// прямоугольники

RECT r1={100,100,200,200};

ViewRect(r1);

ViewRect("r1",r1);

cin.get();

RECT r2;

r2.left=p1.x;

r2.top=p1.y;

r2.right=p2.x;

r2.bottom=p2.y;

ViewRect("r2",r2);

cin.get();

RECT r3=CreateRect(p1,p3);

ViewRect("r3",r3);

cin.get();

}

// точки

void ViewPoint(POINT p) {

cout << "(" << p.x << "," << p.y << ")" << endl;

}

void ViewPoint(char name [] ,POINT p) {

cout << name << " : ";

ViewPoint(p);

}

POINT CreatePoint(LONG x,LONG y) {

POINT p;

p.x=x;

p.y=y;

return p;

}

// прямоугольники

void ViewRect(RECT r) {

cout << "(left=" << r.left << "; top=" << r.top << "; right=" << r.right

<< "; bottom=" << r.bottom << ")" << endl;

}

void ViewRect(char name [],RECT r) {

cout << name << " : ";

ViewRect(r);

}

RECT CreateRect(POINT p1, POINT p2) {

RECT r;

r.left=p1.x;

r.top=p1.y;

r.right=p2.x;

r.bottom=p2.y;

return r;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]