statyczna lista c++
Ostatnio zmodyfikowano 2014-11-28 17:50
eklinci Temat założony przez niniejszego użytkownika |
statyczna lista c++ » 2014-11-28 17:00:28 oto zadanie: Tematem ćwiczenia jest zamodelowanie zaworów (valve) połączonych szeregowo. Klasę tę należy tak zaimplementować, aby tylko jeden zawór był otwarty (otwarcie zaworu skutkuje zamknięciem pozostałych). Utworzenie zaworu z opcją otwarty skutkuje zamknięciem pozostałych a defaultowo zawory tworzone są jako zamknięte. Napisz program tak by można było dodać dowolnie wiele zaworów (należy stworzyć szablon klasy lista jednokierunkowa o bardzo ograniczonej funkcjonalności potrzebnej dla tego programu). Main programu wygląda następująco (nie wolno go modyfikować): */ #include <iostream> using namespace std;
#include "Valve.h" #include "Valve.h"
int main() { Valve v1; Valve v2( Valve::Opened ); Valve v3( Valve::Opened ); cout << "Po stworzeniu: Zawor v1 " << status2symbol( v1 ) << " zawor v2 " << status2symbol( v2 ) << " zawor v3 " << status2symbol( v3 ) << endl; v2.open(); cout << "Po otwarciu v2: Zawor v1 " << status2symbol( v1 ) << " zawor v2 " << status2symbol( v2 ) << " zawor v3 " << status2symbol( v3 ) << endl; v3.open(); cout << "Po otwarciu v3: Zawor v1 " << status2symbol( v1 ) << " zawor v2 " << status2symbol( v2 ) << " zawor v3 " << status2symbol( v3 ) << endl; v1.open(); cout << "Po otwarciu v1: Zawor v1 " << status2symbol( v1 ) << " zawor v2 " << status2symbol( v2 ) << " zawor v3 " << status2symbol( v3 ) << endl; Valve v4( Valve::Opened ); cout << "Po dodaniu otwartego v4: Zawor v1 " << status2symbol( v1 ) << " zawor v2 " << status2symbol( v2 ) << " zawor v3 " << status2symbol( v3 ) << " zawor v4 " << status2symbol( v4 ) << endl; v1.open(); cout << "Po otwarciu v1: Zawor v1 " << status2symbol( v1 ) << " zawor v2 " << status2symbol( v2 ) << " zawor v3 " << status2symbol( v3 ) << " zawor v4 " << status2symbol( v4 ) << endl; Valve::clean(); }
a oto m ó j kod prosz ę o pomoc:
#include <iostream> #include <string>
using namespace std;
template < class T > class lista { private: struct Node { T item; struct Node * next; }; Node * begin; Node * end; public: int ilosc; lista(); void add( T item ); void deleteall(); void show(); T & operator []( int n ); }; template < class T > lista < T >::lista() { begin = end = NULL; ilosc = 0; } template < class T > void lista < T >::add( T item ) { Node * add = new Node; add->item = item; add->next = NULL; if( begin == NULL ) { begin = end = add; } else { end->next = add; end = add; } ilosc++; } template < class T > void lista < T >::deleteall() { Node * temp = new Node; temp = begin; while( temp ) { temp = temp->next; delete temp; } ilosc = 0; } template < class T > T & lista < T >::operator []( int n ) { int i = 1; Node * temp = new Node; temp = begin; while( temp && i != n ) { temp = temp->next; i++; } return temp->item; }
class Valve { public: enum { Closed, Opened }; Valve( int s = Closed ); friend string status2symbol( const Valve & v ); void open(); private: static lista < Valve > list; void clean(); int state; };
Valve::Valve( int s ) { int i = 1; while( list.ilosc <= i ) { list.state = Closed; i++; } state = s; list.add( * this ); }
void Valve::open() { int i = 1; while( list.ilosc <= i ) { list.state = Closed; i++; } ( * this ).state = Opened; } void Valve::clean() { list.deleteall(); } string status2symbol( const Valve & v ) { string o = "otwarty"; string z = "zamknienty"; if( v.state == 0 ) return z; else return o; }
int main() { Valve v1; Valve v2( Valve::Opened ); Valve v3( Valve::Opened ); cout << "Po stworzeniu: Zawor v1 " << status2symbol( v1 ) << " zawor v2 " << status2symbol( v2 ) << " zawor v3 " << status2symbol( v3 ) << endl; v2.open(); cout << "Po otwarciu v2: Zawor v1 " << status2symbol( v1 ) << " zawor v2 " << status2symbol( v2 ) << " zawor v3 " << status2symbol( v3 ) << endl; v3.open(); cout << "Po otwarciu v3: Zawor v1 " << status2symbol( v1 ) << " zawor v2 " << status2symbol( v2 ) << " zawor v3 " << status2symbol( v3 ) << endl; v1.open(); cout << "Po otwarciu v1: Zawor v1 " << status2symbol( v1 ) << " zawor v2 " << status2symbol( v2 ) << " zawor v3 " << status2symbol( v3 ) << endl; Valve v4( Valve::Opened ); cout << "Po dodaniu otwartego v4: Zawor v1 " << status2symbol( v1 ) << " zawor v2 " << status2symbol( v2 ) << " zawor v3 " << status2symbol( v3 ) << " zawor v4 " << status2symbol( v4 ) << endl; v1.open(); cout << "Po otwarciu v1: Zawor v1 " << status2symbol( v1 ) << " zawor v2 " << status2symbol( v2 ) << " zawor v3 " << status2symbol( v3 ) << " zawor v4 " << status2symbol( v4 ) << endl; }
Jestem otwarty na krytykę, lecz proszę również o pomoc |
|
michal11 |
» 2014-11-28 17:42:33 Po pierwsze wstaw kod w znaczniki? A po drugie to generalnie jaki masz problem ? Czy tylko szukasz kogoś do code review ? |
|
eklinci Temat założony przez niniejszego użytkownika |
» 2014-11-28 17:50:47 problem mam głównie z konstruktorem. Jak na przykład wstawię no niego na sam początek cout<<"A" to tak jakby program wywoływał go w nieskończoność. Mam problem bo chce żeby ten konstruktor dodawał obiekty do listy statycznej |
|
« 1 » |