Скачиваний:
26
Добавлен:
20.06.2014
Размер:
151.57 Кб
Скачать

Лабораторная работа №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;

}

}

Соседние файлы в папке Отчеты