Evo rijesio sam problem na nacin kako se od mene trazilo u zadatku /bez koristenja vektora/, imam 2 problema:
Code:
#include <iostream>
#include <string>
using namespace std;
class cStudent {
public:
int brojIndexa;
char *imePrezime;
int godinaStudija;
cStudent() {}
cStudent(int Index, char *iP, int gS) {
this->brojIndexa = Index;
this->imePrezime = new char[strlen(iP)+1];
strcpy (this->imePrezime, iP);
this->godinaStudija = gS;
}
//Copy constructor
cStudent (cStudent &orginal) {
this->brojIndexa = orginal.brojIndexa;
this->imePrezime = new char [strlen(orginal.imePrezime)+1];
this->imePrezime = orginal.imePrezime;
this->godinaStudija = orginal.godinaStudija;
}
inline int const getIndex() {
return this->brojIndexa;
}
inline char const *getimePrezime() {
return this->imePrezime;
}
inline int const getgodinaStudija() {
return this->godinaStudija;
}
};
class cDLstudent :public cStudent {
public:
char *Grad;
cDLstudent() {
this->brojIndexa = 693;
this->imePrezime = new char[strlen("Jasmin Begic")+1];
strcpy (this->imePrezime, "Jasmin Begic");
this->godinaStudija = 2;
this->Grad = new char [strlen("Cazin")+1];
this->Grad = "Cazin";
}
cDLstudent (int Index, char *iP, int gS, char *gR) {
this->brojIndexa = Index;
this->imePrezime = new char[strlen(iP)+1];
strcpy (this->imePrezime, iP);
this->godinaStudija = gS;
this->Grad = new char [strlen(gR)+1];
strcpy(this->Grad,gR);
}
~cDLstudent() {
delete [] imePrezime;
delete [] Grad;
}
inline const char *getGrad () {
return this->Grad;
}
cStudent operator = (cDLstudent objekt) {
this->brojIndexa = objekt.brojIndexa;
this->imePrezime = new char[strlen(objekt.imePrezime)+1];
strcpy(this->imePrezime,objekt.imePrezime);
this->godinaStudija = objekt.godinaStudija;
this->Grad = new char [strlen(objekt.Grad)+1];
strcpy(this->Grad,objekt.Grad);
}
};
class cIspit {
public:
char *nazivIspita;
char *datumOdrzavanja;
cDLstudent **prijavljeni;
int brojac;
cIspit (char *Naziv, char *Datum) {
this->nazivIspita = new char [strlen(Naziv)+1];
strcpy(this->nazivIspita,Naziv);
this->datumOdrzavanja = new char [strlen(Datum)+1];
strcpy(this->datumOdrzavanja, Datum);
prijavljeni = new cDLstudent *[50];
brojac = 0;
}
~cIspit() {
delete [] nazivIspita;
delete [] datumOdrzavanja;
for (int i = 0;i<brojac;i++) {
delete [] prijavljeni[i];
}
delete [] prijavljeni;
}
void dodajPrijavu (cDLstudent &student) {
if (brojac < 50)
{
if (brojac>0){
int noviBrojac = brojac;
for(int i=0; i<noviBrojac; i++)
{
cout<<prijavljeni[i]->brojIndexa<<" "<<student.brojIndexa<<endl;
if (prijavljeni[i]->brojIndexa != student.brojIndexa)
{
//prijavljeni[i] = new DLStudent;
prijavljeni[brojac]=&student ; // pokazivac prijavljen i pokazuje na referencu damir
brojac++;
}else {cout<<"Isti broj indexa";}
}
}else{
prijavljeni[brojac]=&student ; // pokazivac prijavljen i pokazuje na referencu damir
brojac++;
}
}else{
cout<<" ne moze se pijaviti vise studenata\n";}
}
friend ostream& operator<< (ostream& os, cIspit Juni)
{
cout<<"uso"<<endl;
os<<"naziv ispita je: "<< Juni.nazivIspita << " datum: "<< Juni.datumOdrzavanja<<endl;
for(int i=0; i<Juni.brojac; i++)
{
os<< Juni.prijavljeni[i]->brojIndexa << Juni.prijavljeni[i]->imePrezime <<endl;
}
return os;
}
};
void main()
{
char naziv [100];
char datum [11];
int broj;
int index;
char ime[100];
char grad[59];
cIspit *Juni;
cout<<"Unesite naziv ispita \n";
cin>> naziv;
cout<<"UNesite datum \n";
cin>> datum;
Juni = new cIspit(naziv, datum);
cout<<" Koliko studenata zelite prijaviti: \n";
cin>> broj;
cDLstudent **Studenti;
Studenti = new cDLstudent*[broj];
for (int i=0; i < broj; i++)
{
cout<<"UNesite broj indexa, ime i prezim, grad\n";
cin>>index >> ime >> grad;
Studenti[i] = new cDLstudent(index, ime, 2, grad);
Juni->dodajPrijavu(*Studenti[i]);
}
cout<< *Juni;
int xxx;
cin>>xxx;
};
Prvi problem jeste, kako da uredim klasu cIspit, da funkcije iz iste mogu pristupiti protected clanovima klasa cStudent i cDLStudent da bih izbjegao deklaraciju svih clanova svih klasa kao public (napomena nije problem s kalasama cStudent i cDLstudent jer njih znam urediti tako da rade sa protected clanovima).
Drugi problem:
Posto sam ovaj code uzeo iz jednog drugog zadatka, nije mi jasno bas kako funkcionise pa ako moze neko da se baci u detalje :)
Code:
void dodajPrijavu (cDLstudent &student) {
if (brojac < 50)
{
if (brojac>0){
int noviBrojac = brojac;
for(int i=0; i<noviBrojac; i++)
{
cout<<prijavljeni[i]->brojIndexa<<" "<<student.brojIndexa<<endl;
if (prijavljeni[i]->brojIndexa != student.brojIndexa)
{
//prijavljeni[i] = new DLStudent;
prijavljeni[brojac]=&student ; // pokazivac prijavljen i pokazuje na referencu damir
brojac++;
}else {cout<<"Isti broj indexa";}
}
}else{
prijavljeni[brojac]=&student ; // pokazivac prijavljen i pokazuje na referencu damir
brojac++;
}
}else{
cout<<" ne moze se pijaviti vise studenata\n";}
}