|
Programiranje Programski jezici, tehnike, alatke... |
|
Alatke vezane za temu | Vrste prikaza |
24.9.2009, 11:05 | #1 |
Novi član
|
Problem pakovanja ranca
E ljudi imam ovakav problem za ispit i trebam pomoc:
Napisati C++ kod koji simulira korišćenje ranaca. Svaki ranac ima određen zapreminski kapacitet, izražen u litrama, kao i nosivost, izraženu u kilogramima. U ranac se može ubaciti razni teret, koji ima svoju zapreminu i težinu. U svakom trenutku moguće je saznati koliko je prostora ostalo slobodno u rancu, ali ne i kolika je preostala nosivost ranca. Ukoliko se u ranac ubaci više kilograma nego što je njegova nosivost, ranac će da pukne i potrebno ga je zašiti. Napisati apstraktnu klasu Ranac, sa javnim metodama:
Za klasu ranac napisati „fabriku“ (koristeći Factory šablon), sa statičkom metodom:
U svrhu simuliranja tereta, napisati apstraktnu klasu Teret sa interfejsom:
Konačno, napisati i klase Posmatrac, i iz nje izvedenu klasu Svalja. Posmatrači posmatraju rance (po Observer šablonu), i imaju metodu:
Trebaju mi ideje i uputstva kako da rijesim nesto sam poceo ali mislim da nisam na dobrom putu. Treba mi pomoc kako da napravim apstraktnu klasu Ranac i iz nje da izvedem ove druge i tako to... |
29.9.2009, 11:14 | #2 |
Novi član
|
Re: Problem pakovanja ranca
Kod:
#include <cstdlib> #include <iostream> #include <string> using namespace std; class Ranac{ public: virtual float kapacitet(); virtual float slobodno(); virtual void ubaci(string i,float n,float z); protected: float zapremina; float nosivost; string predmet; float nos,zap,ostatak; string naz; }; void Ranac::ubaci(string i,float n,float z){ naz=i; nos=n; zap=z; } float Ranac::kapacitet(){ return zapremina; }; float Ranac::slobodno(){ ostatak=zapremina-zap; return ostatak; }; class Transalp:public Ranac{ public: Transalp(){ zapremina=90; nosivost=30; } }; class Odyssee:public Ranac{ public: Odyssee(){ zapremina=50; nosivost=20; } }; class Contour:public Ranac{ public: Contour(){ zapremina=30; nosivost=12; } }; class Teret{ public: Teret(string i,float n,float z){ naziv(); tezina(); zapremina(); } string naziv(){ cout<<"Unesite naziv predmeta koji se ubacuje:"; getline(cin,ime); return ime; } float tezina(){ cout<<"Unesite tezinu predmeta:"; cin>>nos; return nos; } float zapremina(){ cout<<"Unesite zapreminu predmeta:"; cin>>zap; return zap; } private: string ime; float zap; float nos; }; Poslednja ispravka: VojaM (29.9.2009 u 16:09) Razlog: ubačeni code tagovi da zagrade ne bi postale smajliji |
29.9.2009, 11:25 | #3 | |
Starosedelac
|
Re: Problem pakovanja ranca
Citat:
Ne mozes ih koristiti zato sto nije moguce instancirati apstraktne klase. Potrebno je da iz nje izvedes odredjene i overrideujes sve pure virtual funkcije. |
|
29.9.2009, 11:53 | #4 |
Novi član
|
Re: Problem pakovanja ranca
OK to otprilike znam ali moze li neki primjer... Ako moze evo ovaj primjer iznad sto sam napravio...
|
1.10.2009, 21:10 | #5 | |
V.I.P. Programiranje
|
Re: Problem pakovanja ranca
Citat:
Kod:
virtual int foo(); |
|
2.10.2009, 8:45 | #6 | |
Starosedelac
|
Re: Problem pakovanja ranca
Citat:
Uh... Pojma nemam... Poslednja ispravka: MG-RAY (2.10.2009 u 8:54) |
|
2.10.2009, 13:42 | #7 |
V.I.P. Programiranje
|
Re: Problem pakovanja ranca
Citat iz jednog .h fajla (samo sam uzeo primer):
Kod:
virtual IMeshWriter* createMeshWriter(EMESH_WRITER_TYPE type) = 0; A sad mi baš ništa nije jasno. |
2.10.2009, 16:47 | #8 |
Član
Član od: 9.7.2007.
Poruke: 119
Zahvalnice: 2
Zahvaljeno 31 puta na 29 poruka
|
Re: Problem pakovanja ranca
Evo jednostavnog primera iz knjige Brucea Eckela "Thinking in C++, 2nd ed. Volume 1" (postoji i prevod na sprski jezik)
U poglavlju "Abstract base classes and pure virtual functions" govori se detaljno o tome. Knjiga se može besplatno skinuti odavde: http://www.mindview.net/Books/DownloadSites Kod:
// Pure abstract base classes #include <iostream> using namespace std; enum note { middleC, Csharp, Cflat }; // Etc. class Instrument { public: // Pure virtual functions: virtual void play(note) const = 0; virtual char* what() const = 0; // Assume this will modify the object: virtual void adjust(int) = 0; }; // Rest of the file is the same ... class Wind : public Instrument { public: void play(note) const { cout << "Wind::play" << endl; } char* what() const { return "Wind"; } void adjust(int) {} }; class Percussion : public Instrument { public: void play(note) const { cout << "Percussion::play" << endl; } char* what() const { return "Percussion"; } void adjust(int) {} }; class Stringed : public Instrument { public: void play(note) const { cout << "Stringed::play" << endl; } char* what() const { return "Stringed"; } void adjust(int) {} }; class Brass : public Wind { public: void play(note) const { cout << "Brass::play" << endl; } char* what() const { return "Brass"; } }; class Woodwind : public Wind { public: void play(note) const { cout << "Woodwind::play" << endl; } char* what() const { return "Woodwind"; } }; // Identical function from before: void tune(Instrument& i) { // ... i.play(middleC); } // New function: void f(Instrument& i) { i.adjust(1); } int main() { Wind flute; Percussion drum; Stringed violin; Brass flugelhorn; Woodwind recorder; tune(flute); tune(drum); tune(violin); tune(flugelhorn); tune(recorder); f(flugelhorn); } Poslednja ispravka: VojaM (6.10.2009 u 13:14) Razlog: Bruce Eckel-ove -->knjige Brucea Eckela... e, moja srpska jeziko... |
Bookmarks sajtovi |
|
|
Slične teme | ||||
tema | temu započeo | forum | Odgovora | Poslednja poruka |
Problem sa Adobe Flash performansama na Windows Vista x64 Home Premium OS-u | VladimirBalt | Kvarovi | 0 | 23.8.2009 0:29 |
Gigabyte NX96T 9600GT, čudan problem | De_Italiano | Grafika | 7 | 19.7.2009 19:31 |
Problem sa WiFi-om... | matke | Kvarovi | 1 | 11.1.2008 14:51 |
Veliki problem sa RAM memorijom | leka | Kvarovi | 10 | 27.7.2006 10:17 |