программирование
.docx
|
Министерство образования и науки Российской Федерации Калужский филиал федерального государственного бюджетного образовательного учреждения высшего профессионального образования «Московский государственный технический университет имени Н.Э. Баумана» (КФ МГТУ им. Н.Э. Баумана) |
ФАКУЛЬТЕТ |
"Фундаментальные науки" |
КАФЕДРА |
"Программное обеспечение ЭВМ, информационные технологии и прикладная математика" |
О Т Ч Е Т
Лабораторная работа №1
Вариант 6
ДИСЦИПЛИНА:
"Программирование"
ТЕМА:
"Иерархия классов и объекты в C++"
Выполнил: студент гр. ИТД.Б-31 |
Тачалов Е.И.____________________
|
Проверил: |
Пчелинцева Н.И._________________ |
Дата сдачи (защиты) лабораторной работы: |
|
|
Результаты сдачи (защиты): Количество рейтинговых баллов |
|
|
Оценка |
|
Калуга, 2014 г.
Цель работы: получить практические навыки реализации иерархии классов на языке С++.
Задачи:
-
Реализовать классы PrintedMatter, Book, Magazine, CourseBook.
-
Описать в каждом классе конструкторы без параметров и с параметрами, конструкторы копирования.
-
Реализовать в каждом классе метод для вывода на экран полей объектов.
Иерархия классов в виде графа:
Определение пользовательских классов:
#ifndef classes_h
#define classes_h
#include <iostream>
using namespace std;
const int defaultDay = 1;
const int defaultMonth = 1;
const int defaultYear = 1990;
const int defaultCopies = 0;
class PrintedMatter
{
protected:
//Поля класса PrintedMatter
char *publishing;
char *name;
int printedCopies;
int day;
int month;
int year;
public:
PrintedMatter(); //Конструктор без параметров
PrintedMatter(char*, char*, int, int, int, int); //Конструктор с параметрами
PrintedMatter(const PrintedMatter&); //Конструктор копирования
virtual void ShowData(); //Метод, выводящий на экран содержимое полей объекта класса
};
class Magazine: public PrintedMatter
{
protected:
char *topic;
public:
Magazine(); //Конструктор без параметров
Magazine(char*, char*, int, int, int, int, char*); //Конструктор с параметрами
Magazine(const Magazine&); //Конструктор копирования
void ShowData(); //Метод, выводящий на экран содержимое полей объекта класса
};
class Book: public PrintedMatter
{
protected:
char *author;
public:
Book(); //Конструктор без параметров
Book(char*, char*, int, int, int, int, char*); //Конструктор с параметрами
Book(const Book&); //Конструктор копирования
virtual void ShowData(); //Метод, выводящий на экран содержимое полей объекта класса
};
class CourseBook: public Book
{
protected:
char *subject;
public:
CourseBook(); //Конструктор без параметров
CourseBook(char*, char*, int, int, int, int, char*, char*); //Конструктор с параметрами
CourseBook(const CourseBook&); //Конструктор копирования
void ShowData(); //Метод, выводящий на экран содержимое полей объекта класса
};
#endif
Реализация конструкторов и методов классов:
#include "classes.h"
PrintedMatter::PrintedMatter()
{
name = "DefaultName";
publishing = "DefaultPublishing";
day = defaultDay;
month = defaultMonth;
year = defaultYear;
printedCopies = defaultCopies;
cout << "without parameters\n";
}
PrintedMatter::PrintedMatter(char *_name, char* _publishing, int _day, int _month, int _year, int _printedCopies)
{
name = _name;
publishing = _publishing;
day = _day;
month = _month;
year = _year;
printedCopies = _printedCopies;
cout << "with parameters\n";
}
PrintedMatter::PrintedMatter(const PrintedMatter &_PrintedMatter)
{
name = _PrintedMatter.name;
publishing = _PrintedMatter.publishing;
day = _PrintedMatter.day;
month = _PrintedMatter.month;
year = _PrintedMatter.year;
printedCopies = _PrintedMatter.printedCopies;
cout << "copy\n";
}
void PrintedMatter::ShowData()
{
cout <<"\""<< name << "\"" << ":" << endl;
cout << "Published by " << publishing << "," << day << "/" << month << "/" << year << "." << endl;
cout << "Printed copies: " << printedCopies << endl;
}
Magazine::Magazine():PrintedMatter()
{
topic = "DefaultTopic";
}
Magazine::Magazine(char *_name, char* _publishing, int _day, int _month, int _year, int _printedCopies, char *_topic):PrintedMatter(_name, _publishing, _day, _month, _year, _printedCopies)
{
topic = _topic;
}
Magazine::Magazine(const Magazine &_Magazine):PrintedMatter(_Magazine)
{
topic = _Magazine.topic;
}
void Magazine::ShowData()
{
PrintedMatter::ShowData();
cout << "Topic is " << topic << endl;
}
Book::Book():PrintedMatter()
{
author = "DefaultAuthorName";
}
Book::Book(char *_name, char* _publishing, int _day, int _month, int _year, int _printedCopies, char *_author):PrintedMatter(_name, _publishing, _day, _month, _year, _printedCopies)
{
author = _author;
}
Book::Book(const Book &_Book):PrintedMatter(_Book)
{
author = "DefaultAuthorName";
}
void Book::ShowData()
{
PrintedMatter::ShowData();
cout << "Author is " << author << endl;
}
CourseBook::CourseBook():Book()
{
subject = "DefaultSubjectName";
}
CourseBook::CourseBook(char *_name, char *_publishing, int _day, int _month, int _year, int _printedCopies, char *_author, char *_subject):Book(_name, _publishing, _day, _month, _year, _printedCopies, _author)
{
subject = _subject;
}
CourseBook::CourseBook(const CourseBook &_CourseBook):Book(_CourseBook)
{
subject = "DefaultSubjectName";
}
void CourseBook::ShowData()
{
Book::ShowData();
cout << "Subject is " << subject << endl;
}
Исходный код основной программы:
#include <iostream>
#include "classes.h"
using namespace std;
void main()
{
PrintedMatter PM1; //Вызов конструктора без параметров
PM1.ShowData(); //Вывод на экран содержимого полей объекта
cout << endl;
PrintedMatter PM2("MyPrintedMatter", "MyPublicationHouse", 1, 1, 1991, 1000000); //Вызов конструктора с параметрами
PM2.ShowData(); //Вывод на экран содержимого полей объекта
cout << endl;
PrintedMatter PM3(PM1); //Вызов конструктора копирования
PM3.ShowData(); //Вывод на экран содержимого полей объекта
cout << endl;
Magazine M1; //Вызов конструктора без параметров
M1.ShowData(); //Вывод на экран содержимого полей объекта
cout << endl;
Magazine M2("All about celebrities", "MyPublicationHouse", 12, 1, 2007, 1000, "Celebrities"); //Вызов конструктора с параметрами
M2.ShowData(); //Вывод на экран содержимого полей объекта
cout << endl;
Magazine M3(M1); //Вызов конструктора копирования
M3.ShowData(); //Вывод на экран содержимого полей объекта
cout << endl;
Book Book1; //Вызов конструктора без параметров
Book1.ShowData(); //Вывод на экран содержимого полей объекта
cout << endl;
Book Book2("50 shades of grey", "PressHouse", 20, 06, 2011, 2345, "E.L.James"); //Вызов конструктора с параметрами
Book2.ShowData(); //Вывод на экран содержимого полей объекта
cout << endl;
Book Book3(Book1); //Вызов конструктора копирования
Book3.ShowData(); //Вывод на экран содержимого полей объекта
cout << endl;
CourseBook CourseBook1; //Вызов конструктора без параметров
CourseBook1.ShowData();
cout << endl;
CourseBook CourseBook2("Math", "BlackHorse", 26, 2, 1999, 12109, "F.Boldman", "Mathematic"); //Вызов конструктора с параметрами
CourseBook2.ShowData(); //Вывод на экран содержимого полей объекта
cout << endl;
CourseBook CourseBook3(CourseBook1); //Вызов конструктора копирования
CourseBook3.ShowData(); //Вывод на экран содержимого полей объекта
cout << endl;
system("pause");
}
Результат работы демонстрационной программы:
Виртуальная функция - метод класса, который может быть переопределён в классах-наследниках так, что конкретная реализация метода для вызова будет определяться во время исполнения. Т.о. программисту необязательно знать точный тип объекта для работы с ним через виртуальные методы: достаточно знать, что объект принадлежит классу или наследнику класса, в котором метод объявлен.
Вывод: в ходе лабораторной работы была реализована иерархия классов на языке С++, реализована программа, в которой происходят действия над объектами созданных классов.