|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
27.03.2011, 20:35 | #1 |
Пользователь
Регистрация: 27.03.2011
Сообщений: 22
|
иерархия объектов
начнем, пожалуй:
иерархия Классов: object: -WH, Detail, IZD, Mech, Node; иерархия объектов WH<-IZD<-Mech<-Node<-Detail; допустим в WH(склад) будут 2 IZD(изделия) в классе object есть поле beg, указатель на связанный список. С помощью этого списка я реализую включение объектов. beg указывает на объект *item. А item В свою очередь указывает на на следущий айтем и на *object. Который и является IZD. ну и т.д. Далее: вот код: файл head.h #include <iostream> #include <string> using namespace std; #pragma once class item; class object { public: item *beg; // указатель на список virtual void show()=0; }; class item { public: item *next; object *info; // void del(); //item(){cout<<"\nконструктор\n";}; //~item(){cout<<"\nдеструктор\n";}; static void add(object*, object*); //void show(); }; //-------------------- class IZD : public object { protected: string NAME; //наименование public: IZD(string name="без название (IZD)"){NAME=name; beg=NULL;}; IZD(const IZD &); // конструктор копирования virtual ~IZD(){};// деструктор string getname(); //получение наименования void setname(string); // инициализация наименования void show(); }; //-------------------- class Mech : public object // механизм { protected: string MechName; //наименования механизма public: Mech(string mechname="без названия (Mech)") { MechName=mechname; beg=NULL; } void show(); }; //--------------------- class Node : public object // узел { protected: string NodeName; //наименовани узла public: Node(string nodename="без названия (Node)") { beg=NULL; NodeName=nodename; }; void show(); }; //---------------------- class Detail : public object // деталь { protected: string DetailName; //наименование детали double weight; //вес детали public: Detail (string detailname="без название (Detail)", double we=0.0) { DetailName=detailname; weight=we; beg=NULL; }; void show(); }; //---------------------- typedef double(*PF1)(object *ob);//задаем тип указателя на функцию class WH : public object { protected: string NameWH; //название склада int size; // площадь склада public: WH (string namewh="без название (склад)", int s=0) // конструктор { NameWH=namewh; size=s; beg=NULL; }; void show(); double for_each1(PF1 action1, string); }; Файл Detail.cpp #include "head.h" #include <windows.h> #include <iostream> #include <string> using namespace std; void Detail::show() { //cout<<"*************"<<endl; cout<<"название детали: "<<DetailName<<" tее вес:"<<weight<<endl; cout<<"_____________"<<endl; } файл item.cpp #include "head.h" #include <windows.h> #include <iostream> #include <string> using namespace std; void item::add(object * nach,object *dop) { if (nach->beg==NULL) { item *it; it=new item; nach->beg=it; it->next=NULL; it->info=dop; } else { item *it; it=new item; nach->beg->next=it; it->next=NULL; it->info=dop; } } файл IZD.cpp #include "head.h" #include <windows.h> #include <iostream> #include <string> using namespace std; IZD::IZD(const IZD &M) //конструктор копирования { NAME=M.NAME; } string IZD::getname() //селектор наименования { return NAME; } void IZD::setname(string s) //модификатор наименования { NAME=s; } void IZD::show() { //cout<<"**************************** **********"<<endl; cout<<"Название изделия:"<<NAME<<endl; cout<<"|||||||||||||||||||||||||||| |||||||||||||"<<endl; item *temp; if (this->beg==NULL){cout<<"в данном изделии нет механизмов"<<endl; return;}; temp=this->beg; do { temp->info->show(); temp=temp->next; } while (temp); } |
27.03.2011, 20:36 | #2 |
Пользователь
Регистрация: 27.03.2011
Сообщений: 22
|
файл Mech.cpp
#include "head.h" #include <windows.h> #include <iostream> #include <string> using namespace std; void Mech::show() { //cout<<"**************************** *"<<endl; cout<<"Название механизма:"<<MechName<<endl; cout<<"**************************** ****"<<endl; item *temp; if (this->beg==NULL){cout<<"в данном механизме нет узлов"<<endl; return;}; temp=this->beg; do { temp->info->show(); temp=temp->next; } while (temp); } файл Node.cpp #include "head.h" #include <windows.h> #include <iostream> #include <string> using namespace std; void Node::show() { //cout<<"********************"<<endl; cout<<"Название узла:"<<NodeName<<endl; cout<<"-----------------------"<<endl; item *temp; if (this->beg==NULL){cout<<"в данном узле нет деталей"<<endl; return;}; temp=this->beg; do { temp->info->show(); temp=temp->next; } while (temp); } файл WH.cpp #include "head.h" #include <windows.h> #include <iostream> #include <string> using namespace std; void WH::show() { cout<<"Название склада:"<<NameWH<<endl; cout<<"^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^"<<endl; item *temp; if (this->beg==NULL){cout<<"склад пустой"<<endl; return;}; temp=this->beg; do { temp->info->show(); temp=temp->next; } while (temp); }; double WH::for_each1(PF1 action1 ,string s) // итератор { //вообщем, суть в том, что мне нужно выводить //сумаррный вес всех деталей в заданом узле, при чем с данного склада //не получается у меня обратится к объекту, который на иерахию ниже item *i=beg; //указатель на связанный список //допустим хочу получить название какого нить механизма, // к примеру вот такого: string ss=i->info->beg->info->MechName; //там где красненкое в выпадающем списке уже не выходит поле beg, //а совсем другие методы.... как обратиться к названию механизма? }; файл main.cpp #include "head.h" #include <windows.h> #include <iostream> #include <string> using namespace std; double ves (object *ob) { }; void main() { SetConsoleOutputCP(1251); SetConsoleCP(1251); IZD i1("Машина(i1)"); //создаем изделие Mech m2("Рулевой механизм(m2)"), m1("Мотор (m1)"); // создаем механзмы Detail d1("Болтик (d1)", 20.5),d2("Звено (d2)", 50.5), d3("Гайка(d3)", 45.8); //создаем детали Node n1("Цепь(n1)"), n2 ("Сцепление(n2)"); //создаем детали WH w1("склад № 666"); //создаем пустой склад object *dy1=&d1, *dy2=&d2, *ny1=&n1, *my1=&m1, *dy3=&d3, *ny2=&n2, *iy1=&i1, *my2=&m2, *wy1=&w1; //создаем указатели на абстракный класс, и связываем их с соотвествующими объектами item::add(ny1,dy1); //добовляем объекты в иерархию item::add(ny1,dy2); item::add(ny2,dy3); item::add(my1,ny1); item::add(my1,ny2); item::add(my2,ny1); item::add(iy1,my1); item::add(iy1,my2); item::add(wy1,iy1);// добовляем изделие в склад wy1->show(); cout<<"\n"; } вопрос в коментах определения класса WH |
27.03.2011, 23:46 | #3 |
Пользователь
Регистрация: 27.03.2011
Сообщений: 22
|
Страно, добавил в абстрактный класс object
string getname(); //получение наименования в каждом соотвестующем классе определил функцию эту, и каким то чудесным образом теперь я могу писать конструкции типа: objcet *p; item *i=beg; p=beg->info->beg->info; странно это как то..... |
28.03.2011, 01:21 | #4 |
Пользователь
Регистрация: 27.03.2011
Сообщений: 22
|
Допишу код когда полностью, и выложу. МОжет у кого подобные вопросы просто возникнут....
|
28.03.2011, 23:41 | #5 |
Пользователь
Регистрация: 27.03.2011
Сообщений: 22
|
head.h
Код:
Код:
Последний раз редактировалось Niksan; 28.03.2011 в 23:47. |
28.03.2011, 23:43 | #6 |
Пользователь
Регистрация: 27.03.2011
Сообщений: 22
|
Код:
Последний раз редактировалось Niksan; 28.03.2011 в 23:48. |
28.03.2011, 23:44 | #7 |
Пользователь
Регистрация: 27.03.2011
Сообщений: 22
|
main.cpp
Код:
|
28.03.2011, 23:49 | #8 |
Пользователь
Регистрация: 27.03.2011
Сообщений: 22
|
Русский форум: Сам спросил - сам ответил XD))
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Иерархия данных VBA | leonard | Microsoft Office Excel | 12 | 10.12.2010 12:43 |
Иерархия классов | lirikoff | Помощь студентам | 7 | 21.10.2010 23:51 |
иерархия классов ООП | Astro4ka | Помощь студентам | 3 | 29.06.2010 23:34 |
Иерархия из CheckBox'ов | minarett | JavaScript, Ajax | 1 | 22.02.2010 13:42 |
Иерархия | skyline_skyline | Microsoft Office Excel | 3 | 04.09.2009 13:00 |