Evo par savjeta:
1.) obavezno nabavi sebi neku knjigu po kojoj ces sam uciti C++, te je isto koristiti kada nesto zapne. Probaj Teach Yourself C++ in 21 Days by Jesse Liberty. Nije opsirna, dobra je za pocetnike, dobra je za neke osnovne elemente jezika.
2.) Pripazi malo na izgled koda, stil uvlacenja i ostalo. Ovako napisan kod ti je veoma nepregledan. Koristi uvlacenje redova, vertikalno ravnanje, koristenje praznih redova izmedju linija koda da naglasis vaznost pojedinih blokova.
3.) Za pocetak, evo tvoje klase u malo promijenjenom izdanju:
Code:
class Movie
{
private:
string title;
int timesWatched;
string rating;
public:
Movie() {} // prazan konstruktor
Movie(string newTitle, int newTimes, string newRating);
// get metode
string getTitle() const { return title; }
int getTimesWatched() const { return timesWatched; }
string getRating() const { return rating; }
//set metode
void setTitle(string newTitle) { title = newTitle; }
void setTimesWatched(int newTimes) { timesWatched = newTimes; }
void setRating(string newRating) { rating = newRating; }
};
// konstruktor sa parametrima, prototip deklarisan u klasi
Movie::Movie(string newTitle, int newTimes, string newRating)
{
title = newTitle;
timesWatched = newTimes;
rating = newRating;
}
- include <string> ti ne treba, klasa je ukljucena preko using namespace std
- imena varijabli kao movieName su ti dobra, ali npr. ovo movie ti je suvisno. Dovoljno ti je name, jer ti ova varijabla pripada Movie klasi, to dovoljno govori o njoj. Ostale varijable takodjer. Ipak, promijenio sam name u title, jer se ipak radi o nazivu filma.
- Sve metode su ti inline. Za znacenje inline potrazi po netu malo, ili po ovome forumu. Uglavnom, one su inline jer si ih implementirao odmah u klasi. Ne znam da li je ovo namjerno ili ne.
- Nemas konstruktora. Za pojam konstruktora takodjer malo potrazi po netu. Pomocu njega znatno olaksavas unos u tvom primjeru.
Sto se tice zadatka koji trebas uraditi, ideja je slijedeca. Tebi treba nesto slicno bazi podataka filmova. Znaci, moras imati jednu klasu koja ti sprema podatke o datom fimu. To ti je gornja klasa Movie. Zatim, treba ti klasa koja ce spremati vise tipova podataka Movie, te tako ciniti datu bazu. Naravno, ovo mozes uraditi i strukturnim programiranjem u samoj funkciji main(). Napravis niz tipa Movie, spremas filmove u njega, par petlji da ga ispises i to je otprilike to. Mislim da tebe navise buni to sto mislis da od jedne klase mozes napraviti samo jednu instancu(objekat, kako god…). To nije tacno:
Code:
Movie A;
Movie B;
A.setMovieName(“Gladiator”);
B.setMovieName(“Titanik”);
cout << A.getMovieName() << endl;
cout << B.getMovieName() << endL;
Ovo bi bilo koristeci tvoju klasu.
Ipak, puno ljepsi, bolji, efikasniji nacin je pomocu objektnog programiranja. Napravis klasu koja ce “glumiti” bazu podataka filmova.
Code:
class Movies
{
private:
Movie *data; // pointer za spremanje niza
int dataCount; // broj filmova u bazi
int size; // velicina baze
public:
Movies() {} // prazan konstruktor
Movies(int newSize); // konstruktor sa parametrom size
void insert(Movie newMovie); // insert sluzi za stavljanje filmova u bazu
Movie getMovie(int index); // pomocu getMovie(), moze se "dohvatiti" bilo koji film
void show(int index); // show() je samo za ispis pojedinog filma
};
// konstruktor sa parametrom size
Movies::Movies(int newSize)
{
size = newSize;
data = new Movie[size];
dataCount = 0;
}
void Movies::insert(Movie newMovie)
{
if (dataCount >= size)
cout << "Memory full" << endl;
else
{
data[dataCount] = newMovie;
dataCount++;
}
}
Movie Movies::getMovie(int index)
{
if ( (index >= 0) && (index < dataCount) )
return data[index];
else
return data[0];
}
void Movies::show(int index)
{
if ( (index >= 0) && (index < dataCount) )
{
Movie toShow = data[index];
cout << "Naziv filma: " << toShow.getTitle() << endl;
cout << "Broj pregleda: " << toShow.getTimesWatched() << endl;
cout << "Rating: " << toShow.getRating() << endl;
}
else
cout << "Film pod tim brojem ne postoji!" << endl;
}
Problem oko tvoga zadatka je sto bi se trebalo upotrijebiti dosta tehnika da se uradi efikasno (ne znam koliko si upoznat sa njima): dinamicko alociranje, nizovi (ili neka slozenija struktura podataka), pointeri…
Sto se tice samih pointera, da te ne zbunjujem: dovoljno je znati slijedece:
Code:
int *pointer;
pointer = new int[10];
ti je isto kao da si napisao:
int pointer[10];
Radi se o nizovima naravno… U zadatku se implementira niz filmova.
Evo kako bi to izgledalo da se implementira:
Code:
// main funkcija
int main(void)
{
Movie A("Gladijator", 12, "***");
Movie B("Titanik", 1, "*");
Movies database(2);
database.insert(A);
database.insert(B);
database.show(1);
Movie C = database.getMovie(0);
cout << "\n" << C.getTitle() << endl;
system("pause");
return EXIT_SUCCESS;
}
Cijeli kod je u attachmentu...