
- •Введение
- •План лекции
- •Лекция 1.2. Работа в среде Visual Studio План лекции
- •Практические задания
- •Контрольные вопросы
- •Лекция 2.1. Структура простой программы План лекции
- •Лекция 2.2. Использование функций План лекции
- •Практические задания
- •Контрольные вопросы
- •Тема 3: Переменные и константы Лекция 3.1. Встроенные типы данных. План лекции
- •Лекция 3.2. Константы, перечисления, синонимы типа План лекции
- •Практические задания
- •Контрольные вопросы
- •Тема 4: Операции и выражения Лекция 4.1. Математические операторы и выражения План лекции
- •Лекция 4.2. Логические операторы и выражения. План лекции
- •Практические задания
- •Контрольные вопросы
- •Тема 5: Функции. Лекция 5.1. Личные и встроенные функции. План лекции
- •Основные библиотечные функции c для работы с символьными массивами (string.H)
- •Лекция 5.2. Параметры. Значения по умолчанию. Перегрузка. Рекурсия. План лекции
- •Inline-функции
- •Практические задания
- •Контрольные вопросы
- •Тема 6: Структуры. Классы и объекты. Лекция 6.1. Структуры в языке с. План лекции
- •Лекция 6.2. Классы с открытыми данными. План лекции
- •Лекция 6.3. Конструкторы и деструктор.Cкрытие данных. План лекции
- •Лекция 6.4. Введение в библиотеки классов План лекции
- •Практические задания
- •Контрольные вопросы
- •Тема 7: Циклы, выбор вариантов. Лекция 7.1. Циклы. План лекции
- •Лекция 7.2. Выбор из вариантов. План лекции
- •Практические задания
- •Контрольные вопросы
- •Заключение
- •Литература
- •Содержание
Тема 6: Структуры. Классы и объекты. Лекция 6.1. Структуры в языке с. План лекции
Встроенные типы данных
Личные типы данных
Структуры С
Структуры и функции
Примеры использования структур из библиотек
Встроенные типы данных
В C/С++ существуют встроенные простые типы данных (char, int, double и т.д.) Тип переменных говорит о :
их размере в памяти;
какую информацию они могут хранить;
какие действия (операции) можно совершить над ними.
Личные типы данных
Программист может создавать личные типы, используя операторы :
typedef – синоним стандартного типа;
enum – перечисление;
struct – структура, запись;
class – класс.
Структуры С
Структуры языка С используются для описания данных сложных объектов, например таких как автомобиль, дом, личность, животное и т.д. Представляют собой набор переменных разных типов.
// Пример 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;
}
Структуры и функции
Переменные типа структура могут быть параметрами функций. Функции могут возвращать в качестве результата величину структурного типа. Допустимо присваивание структурных переменных.
// Пример 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;
}
Примеры использования структур из библиотек
Структуры часто используются в библиотеках языка С. В языке С++ обычно применяются не структуры, а классы.
// Пример 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(¤tTime);
cout << "Сегодня - " << ctime(¤tTime) << endl;
cin.get();
time(¤tTime);
struct tm ptm1=*localtime(¤tTime);
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;
}