Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы / var09 my / 07

.doc
Скачиваний:
35
Добавлен:
30.04.2013
Размер:
35.33 Кб
Скачать

Лабораторная работа №7

Востропятов Н. А.

Вар №9

#include <stdio.h>

#include <conio.h>

#include <math.h>

class CBaseObject

{

public:

CBaseObject(void) { m_pPrev = NULL; m_pNext = NULL; data = 0; }

CBaseObject(void *a) { m_pPrev = NULL; m_pNext = NULL; data = a; }

CBaseObject(CBaseObject &src) { m_pPrev = NULL; m_pNext = NULL; data = src.data; }

~CBaseObject(void) { m_pPrev = NULL; m_pNext = NULL; data = 0; }

void *GetData(void) { return data; }

void SetData(void *a) { data = a; }

inline CBaseObject operator=(const CBaseObject &a) { data = a.data; return data; }

void *data;

CBaseObject *m_pPrev;

CBaseObject *m_pNext;

};

class CDerivedObject : public CBaseObject

{

public:

CDerivedObject(void):CBaseObject() { data = k; }

CDerivedObject(float value[3]) { m_pPrev = NULL; m_pNext = NULL; data = k; }

CDerivedObject(float k1, float k2, float k3) { m_pPrev = NULL; m_pNext = NULL; k[0]=k1; k[1]=k2; k[2]=k3; }

CDerivedObject(CDerivedObject &src) { m_pPrev = NULL; m_pNext = NULL; data = src.data; }

~CDerivedObject(void) { m_pPrev = NULL; m_pNext = NULL; data = 0; }

float *GetData(void) { return k; }

float GetK1(void) { return k[0]; }

float GetK2(void) { return k[1]; }

float GetK3(void) { return k[2]; }

void SetData(float k1, float k2, float k3) { k[0]=k1; k[1]=k2; k[2]=k3; }

inline CDerivedObject operator=(const CDerivedObject &a) { k[0]=a.k[0]; k[1]=a.k[1]; k[2]=a.k[2]; return k; }

private:

float k[3];

};

class ObjectManager

{

public:

ObjectManager() { m_pFirstObject = NULL; }

~ObjectManager() { RemoveAllObjects(); };

void AddObject(CBaseObject *pObject);

void RemoveObject(CBaseObject *pObject);

void RemoveAllObjects(void);

void PrintObjects(void);

CBaseObject *FindObjectByValue(float k1, float k2, float k3);

private:

CBaseObject *m_pFirstObject;

};

void ObjectManager::AddObject(CBaseObject *pObject)

{

if (pObject)

{

// printf("ObjectManager: adding object: %f %f %f\n", pObj->GetK1(), pObj->GetK2(), pObj->GetK3());

if (m_pFirstObject)

{

m_pFirstObject->m_pPrev = pObject;

pObject->m_pNext = m_pFirstObject;

pObject->m_pPrev = NULL;

}

m_pFirstObject = pObject;

}

}

void ObjectManager::RemoveObject(CBaseObject *pObject)

{

CBaseObject *pObj = m_pFirstObject;

while (pObj)

{

if (pObj == pObject)// found

{

if (pObj->m_pPrev)

{

pObj->m_pPrev->m_pNext = pObj->m_pNext;

if (pObj->m_pNext)

pObj->m_pNext->m_pPrev = pObj->m_pPrev;

}

else// pObj have no m_pPrev, so this is the first object in chain

{

m_pFirstObject = pObj->m_pNext;

}

delete pObj;

pObj = NULL;

return;

}

else

pObj = pObj->m_pNext;

}

}

void ObjectManager::RemoveAllObjects(void)

{

printf("ObjectManager: removing all objects\n");

CBaseObject *pObj = m_pFirstObject;

CBaseObject *pNext = NULL;

while (pObj)

{

pNext = pObj->m_pNext;

// printf("ObjectManager: deleting object: %f %f %f\n", pObj->GetK1(), pObj->GetK2(), pObj->GetK3());

delete pObj;

pObj = pNext;

}

m_pFirstObject = NULL;

}

void ObjectManager::PrintObjects(void)

{

CBaseObject *pObj = m_pFirstObject;

CDerivedObject *tmp = NULL;

int i=0;

while (pObj)

{

tmp = (CDerivedObject *)pObj;

if (tmp && tmp->GetData())

printf("Derived Object %d: %f %f %f\n", i, tmp->GetK1(), tmp->GetK2(), tmp->GetK3());

pObj = pObj->m_pNext;

i++;

}

}

CBaseObject *ObjectManager::FindObjectByValue(float k1, float k2, float k3)

{

CBaseObject *pObj = m_pFirstObject;

CDerivedObject *tmp = NULL;

while (pObj)

{

tmp = (CDerivedObject *)pObj;

if (tmp && tmp->GetData())

{

if (tmp->GetK1() == k1 &&

tmp->GetK2() == k2 &&

tmp->GetK3() == k3)

return pObj;

}

pObj = pObj->m_pNext;

}

return NULL;

}

void main()

{

CBaseObject *pObj = NULL;

ObjectManager mgr;

for (int i=1; i < 9; i++)

{

pObj = new CDerivedObject(100*i, 10*i, i);

mgr.AddObject(pObj);

pObj = NULL;

}

mgr.PrintObjects();

float k1, k2, k3;

printf("Enter values to search: ");

scanf("%f %f %f", &k1, &k2, &k3);

pObj = mgr.FindObjectByValue(k1, k2, k3);

if (pObj)

printf("Found!\n");

getch();

}

3

Соседние файлы в папке var09 my