
Лабораторная работа №5 Дисциплина: «Объектно-ориентированное программирование». Тема: «Производные классы».
Выполнил: Янковский Д.В.
Проверил; Фефелов С.И.
Задание1: Отладить и организовать корректную работу, представленной ниже, программы:
Листинг №1:
Файл slist.h
#ifndef SLIST_H
#define SLlST_H
// Класс односвязного списка с принадлежащими ему правилами
class LinkedList {
private:
LinkedList* nextPtr; //ссылка на следующий элемент
public:
LinkedList();
LinkedList* next();
LinkedList* previous();
int addAfter(LinkedList* prevMemberPtr);
int remove();
int removeNext();
};
#endif
Файл slist.cpp
#include “slist.h”
LinkedList: : LinkedList(){
nextPtr=this;
}
LinkedList* LinkedList::next(){
return nextPtr;
}
LinkedList* LinkedList::previous(){
LinkedList* memberPtr;
memberPtr=nextPtr;
while(memberPtr->nextPtr != this)
memberPtr = memberPtr->nextPtr;
return memberPtr;
}
LinkedList: :addAfter(LinkedList* prevMemberPtr) {
nextPtr = prevMemberPtr->nextPtr;
prevMemberPtr->nextPtr = this;
return 0;
}
int LinkedList::remove() {
LinkedList* prevMemberPtr;
prevMemberPtr = previous();
return prevMemberPtr->removeNext();
}
int LinkedLlst::removeNext() {
LinkedList* nextMemberPtr = nextPtr;
nextPtr = nextMemberPtr->nextPtr;
nextMemberPtr->nextPtr = 0;
return 0;
}
Файл main.cpp
#include <iostream. h>
#include <iomanip.h> *
#include <string.h>
#include "slist.h"
// Функции общего назначения
// для записи полей
inline void storeCharField(char* target, char* source,
int length) {
strncpy(target, source, length);
target[length-l]= ‘\0’;
}
// ---класс Student------------
LinkedLlst keystone;
class Student : public LinkedList {
private:
float GPA;.
int totalHours;
int creditHours;
int hoursRequired;
public:
char lastName[40];
char firstName[40];
char middle[2]; '
long ssNumber;
public:
Student() : LinkedList() {
lastName[0] = '\0';
firstName[0] = '\0';
middle[0] ='\0';
}
Student(char* ln, char* fn,
char mi, int hoursReg) {
storeCharFleld(lastName,ln,40);
storeCharFleld(middle,&mi,2);
storeCharFleld(firstName,fn,40);
hoursRequired = hoursReq;
GPA = 0;
creditHours = totalHours = 0;
addAfter(&keystone);
}
Static Student = studentStart() {
return(Student*) & keystone;
}
float studentGPA() {
return GPA;
}
void studentNewGPA(float grade, int hours) {
if (grade>4.0 || grade<0.0)
return;
GPA=(GPA*totalHours*grade*hours)/
(totalHours*hours);
totalhours = hours;
if(grade > 1.0)
creditHourse=hours;
}
void studentList() {
cout<< firstName <<" " << lastName;
}
char* studentPassing() {
return (studentGPA() > 1.5 ?
"Passing" : "Falling";
}
};
// Подпрограмма общего назначения
// для определения статуса
void displayStudentList() {
Student* studentPtr = Student::studentStart();
for (;;) {
studentPtr = (Student*)studentPtr->next();
if (studentPtr->Student:: studentStart ())
break;
cout < < studentPtr->st udentPassing()
<<" "<<setprecision(2)
<<studentPtr->studentGPA(><<" ";
studentPtr-> studentList();
cout<<endl;
}
}