[ fanfare @ 01.02.2010. 16:07 ] @
Problem mi se javlja kada pokuĊĦam pristupiti podatku reg_datum u izvedenoj klasi Automobil da bi ga prikazao u funkciji void Automobil::ispis() koja je nasledjena iz apstraktne klase Vozilo. Kako ovo rijesiti?

Zadatak je dat u prilogu!


A kod koji sam napisao :
Code:
#include <iostream>


using namespace std;

class Datum 
{
  public:
    Datum(int d=1, int m=1, int g=2000)
      {
        gg = g;
        mm = (m>0 && m<=12) ? m : 1;
        dd = provjeriDan(d);
      }
    void print() const 
      { cout<<dd<<'.'<<mm<<'.'<<gg<<'.'<<endl;} 
    
  private:
    int dd, mm, gg;
    int provjeriDan(int dan)
      {
        static const int m[13] =
        {0,31,28,31,30,31,30,31,31,30,31,30,31};
        if (dan>0 && dan<=m[mm]) return dan;
        if (mm==2 && dan==29 &&
        (gg%400==0 || (gg%4==0 && gg%100!=0)))
           return dan;
        return 1;
      }
};


class Vozilo
{
      friend int operator >( Vozilo &v1, Vozilo &v2);
      
             
      public:
             Vozilo(char *regB, int  godP,int d,int m,int g): reg_datum(d,m,g)
             {
               reg_broj=new char [strlen(regB)+1];
               strcpy(reg_broj,regB);
               god_proizvodnje=godP;
             }                            
             void registracija(int reg_datum);
             virtual void ispis()=0;
             ~Vozilo() { delete [] reg_broj;  }
      protected:
                char *reg_broj;
                int  god_proizvodnje;
                Datum reg_datum;
};


int operator>( Vozilo &v1, Vozilo &v2 )
{
      if (v1.god_proizvodnje>v2.god_proizvodnje)  return v1.god_proizvodnje;
      else  return v2.god_proizvodnje;
}
void Vozilo::registracija(int regD)
{
     reg_datum=regD;
}

class Putnicko:public Vozilo
{
      public:
             Putnicko(int brP=0,char *regB, int  godP,int d,int m,int g):Vozilo(regB,godP,d,m,g)
             {  broj_putnika=brP;  }
      protected:
                int broj_putnika;
};

class Teretno:public Vozilo
{
      public:
             Teretno(long n=0,char *f,char *regB, int  godP,int d,int m,int g):Vozilo(regB,godP,d,m,g)
             { 
                nosivost=n;
                firma=new char [strlen(f)+1];
                strcpy(firma,f);
             }
             ~Teretno() { delete [] firma;  }
      protected:
                long nosivost;
                char *firma;
};

class Automobil:public Putnicko
{
      public:
             Automobil(char *i,char *p,int brP,char *regB, int  godP,int d,int m,int g):Putnicko(brP,regB,godP,d,m,g)
             {
                vlasnik_ime=new char[strlen(i)+1];
                strcpy(vlasnik_ime,i);
                vlasnik_prezime=new char[strlen(p)+1];
                strcpy(vlasnik_prezime,p);
             }
             void ispis();
             ~Automobil() { delete [] vlasnik_ime; delete [] vlasnik_prezime; }
             
      protected:
                char *vlasnik_ime;
                char *vlasnik_prezime;
};
void Automobil::ispis()
{
     cout<<"automobil reg.ozn.  "<<Automobil::reg_broj<<endl;
     cout<<"datum registracije: "<<Automobil::reg_datum<<endl;
     cout<<"godina proizvodnje: "<<Automobil::god_proizvodnje<<endl;
     cout<<"vlasnik:            "<<Automobil::vlasnik_ime<<" "<<Automobil::vlasnik_prezime<<endl;
}

main()
{
      Automobil a("Marko","Markovic",5,"802-j-318",1998,1,2,2010);
      Vozilo *v1; v1=&a;
      v1->ispis();
      
      system("pause");
}
      

             
                



    
      
             

[ drki89 @ 01.02.2010. 17:27 ] @
Nije problem u pristupu, poziv ispravno vrati datum, ali ti nemas preklopljen operator << za objekat tipa Datum, pa zato ne moze da ispise.

Imas jos gresaka, parametar u funkciji ili konstruktoru ne moze da ima podrazumevanu vrednost ako posle njega imas jos parametara koji nemaju podrazumevanu vrednost.
Kao ovde:
Citat:

Putnicko(int brP=0,char *regB, int godP,int d,int m,int g):Vozilo(regB,godP,d,m,g)

... i ovde:
Citat:

Teretno(long n=0,char *f,char *regB, int godP,int d,int m,int g):Vozilo(regB,godP,d,m,g)


Znaci parametri sa podrazumevanim vrednostima uvek se redjaju od kraja.