- •Задание к программе 1.1
- •Задание к программе 1.2
- •*Задание к программе 1.3
- •*Задание к программе 1.4
- •2. Контрольные вопросы к лабораторной работе №1
- •Объектно-ориентированное программирование Лабораторная работа №2 Дружественные функции, перегрузка операций
- •1. Задание к лабораторной работе
- •Задание к программе 2.2
- •Задание к программе 2.3
- •*Задание к программе 2.4
- •2. Контрольные вопросы к лабораторной работе №2
- •Объектно-ориентированное программирование Лабораторная работа №3 Наследование
- •1. Задание к лабораторной работе
- •Задание к программе 3.1
- •2. Контрольные вопросы к лабораторной работе №3
*Задание к программе 2.4
Упражнения:
Вставьте отладочную печать в конструктор, конструктор копирования и деструктор. Подсчитайте число их вызовов и объясните результат.
Закомментируйте прототип и определение конструктора копии и запустите программу на исполнение, объясните результат.
Проверьте, работает ли перегруженная операция для трех массивов (d=a+b+c;).
Задание (общее)
Разработайте перегруженную операцию вычитания массивов.
Разработайте перегруженную операцию вычисления скалярного произведения векторов (компонентами вектора являются элементы массива).
Разработайте дружественную перегруженную операцию суммирования массивов.
2. Контрольные вопросы к лабораторной работе №2
Перечислите, по крайней мере, три причины необходимости применения дружественных функций.
В чем отличие дружественной функции-члена класса от дружественной функции, не являющейся членом класса?
В каком месте определения класса можно объявлять дружественность функции? Привести пример.
Можно ли создавать перегруженные дружественные функции? Привести пример.
Как сделать предварительное объявление класса и для чего это необходимо?
Как обеспечивается доступ к элементам класса в дружественных функциях?
Приведите собственные примеры перегрузки операций.
Перечислить операции языка С++ которые нельзя сделать перегруженными.
*Приведите пример определения и инициализировать статический член класса.
*Дайте определение ссылки. В чем отличие ссылки от указателя?
*Дайте определение конструктора копирования.
Объектно-ориентированное программирование Лабораторная работа №3 Наследование
Цель работы – изучить простейшие элементы наследования в языке С++, научиться создавать производные классы с множественным наследованием.
1. Задание к лабораторной работе
Программа 3.1. Программа демонстрирует назначение и синтаксис оформления простого наследования и множественного наследования классов. Ниже приведена схема иерархии наследования. Для наглядности исходного текста программы, она разбита на несколько модулей. При компиляции и линковке удобно все модули поместить в один каталог. Для предотвращения возможного включения текста заголовочных файлов в программу более одного раза применяются директивы #ifndef (если не определен), #define, #endif.
Рис.1. Иерархия наследования классов
//Файл univer.h ***Класс УНИВЕРСИТЕТ***
#ifndef _UNIVER_H
#define _UNIVER_H
#include <iostream.h>
class University{
char nameUniversity[40]; //Наименование
public:
void set_University();
void show_University() {cout<<nameUniversity;}
char *get_University() {return nameUniversity;}
};
void University::set_University()
{
cout<<"Введите название университета: ";
cin>>nameUniversity;
}
#endif
//Файл faculty.h ***Класс ФАКУЛЬТЕТ***
#ifndef _FACULTY_H
#define _FACULTY_H
#include <iostream.h>
#include "univer.h"
class Faculty: public University{
char nameFaculty[40];
public:
void set_Faculty();
void show_Faculty() {cout<<nameFaculty;}
char *get_Faculty() {return nameFaculty;}
};
void Faculty::set_Faculty()
{
cout<<"Введите название факультета: ";
cin>>nameFaculty;
}
#endif
//Файл group.h ***Класс ГРУППА***
#ifndef _GROUP_H
#define _GROUP_H
#include <iostream.h>
#include "faculty.h"
class Group: public Faculty{
int numberGroup;
public:
void set_Group();
int get_Group() {return numberGroup;}
};
void Group::set_Group()
{
cout<<"Введите номер группы: ";
cin>>numberGroup;
}
#endif
//Файл lab3.cpp
#include <iostream.h>
#include "group.h"
class Man{ //класс "ЧЕЛОВЕК"
char name[40]; //Имя
int age; //Возраст
char sex; //Пол
public:
void set_nameMan() {cout<<"Введите фамилию: "; cin>>name;}
char *get_nameMan() {return name;}
void set_dataMan();
void show_dataMan();
};
class Student: public Man, public Group{
int year; //Год обучения
long number; //Номер зачетной книжки
public:
void set_dataStudent();
void show_dataStudent();
};
void Man::set_dataMan()
{
set_nameMan();
cout<<"возраст: "; cin>>age;
cout<<"пол (м/ж): "; cin>>sex;
}
void Man::show_dataMan()
{
cout<<get_nameMan()<<" "<<age<<" "<<sex<<endl;
}
void Student::set_dataStudent()
{
set_University();
set_Faculty();
set_Group();
set_dataMan();
cout<<"Введите год обучения :"; cin>>year;
cout<<"номер зачетной книжки: "; cin>>number;
}
void Student::show_dataStudent()
{
cout<<endl;
cout<<get_University()<<" Факультет "<<get_Faculty()<<endl;
cout<<"Группа "<<get_Group()<<" "<<year<<" курс "<<endl;
show_dataMan();
cout<<"Номер зачетной книжки "<<number<<endl;
}
int main()
{
Student st;
st.set_dataStudent();
st.show_dataStudent();
return 0;
}
