• 9 odgovora
  • 4.588 pregleda
Predložak klase 01.08.2006. u 12:06 · pre 246 meseci #1
Može li mi itko na smislenom primjeru objasniti gdje se koristi predložak klase? Općenito, koristim predloške funkcija i znam čemu to, ali za predložak klase ne znam gdje to iskoristiti.
Re: Predložak klase 01.08.2006. u 12:52 · pre 246 meseci #2
Jedan primer koji je meni zatrebao, je tip matrice (u matematičkom smislu, znači sabiranje, množenje, itd.) sa proizvoljnim tipom elemenata — celi brojevi, racionalni (opet posebna klasa), u pokretnom zarezu sa različitom tačnošću...
Re: Predložak klase 01.08.2006. u 12:55 · pre 246 meseci #3
Opet mi se to čini da se može rješiti i predloškom funkcije...

Može li itko napisati ikakav primjer (programski kod) i na tome prikazati čemu to služi? Hvala
Re: Predložak klase 01.08.2006. u 13:03 · pre 246 meseci #4
Kako predloškom funkcije? Hoću da mogu da napišem nešto ovako:

Code:

Matrix<Rational> A(5);
Matrix<Rational> B(5);
...
Matrix<Rational> C = A * B;

Re: Predložak klase 01.08.2006. u 16:13 · pre 246 meseci #7
Nabavi knjigu "c++ primer" od Stanley B. Lippman-a . Tu ti je sve do u sitna crveca objasnjeno.

Potpis
Tko leti vrijedi
Re: Predložak klase 01.08.2006. u 16:31 · pre 246 meseci #8
Evo jedan primer, kada ja koristim "predložak klase", ako sam dobro shvatio
šta je predložak klase:

Na primer, jedna od cestih situacija u programiranju je:

Code:

ObjekatTipa1->Enabled = false;
ObjekatTipa2->Enabled = false;
ObjekatTipa3->Enabled = false;

UradiNesto();

ObjekatTipa1->Enabled = true;
ObjekatTipa2->Enabled = true;
ObjekatTipa3->Enabled = true;


E sad, ovde je problem sto ako nesto pukne u UradiNesto(), ni jedan Enabled = true
nece biti izvrsen. try/finally nije deo C++ jezika a u BCB-u i nije pouzdan. Poseban
slucaj je ako imas "return" negde ranije pa moras da vodis racuna da prethodno i
tu Enable-ujes objekte.

Tada se poseze za takozvanim RAII mehanizmom (kao kod std::auto_ptr) koji garantuje
da ce nakon izlaska iz scope-a biti izvrsen destruktor objekta.

Da ne bih pisao posebnu RAII klasu za svaki tip podataka, evo jednog resenja i to
za VCL, jer ga koristis:


--- H ---
Code:

template<typename TRAIIDisablerEnabler>class TRAII_DisableEnable
{
   TRAIIDisablerEnabler * AObjectToControl;

   public:
   TRAII_DisableEnable( TRAIIDisablerEnabler * ObjectToControl )
   {
      AObjectToControl = ObjectToControl;

      if( AObjectToControl )
      {
         AObjectToControl->Enabled = false;
      }
   }

   virtual ~TRAII_DisableEnable()
   {
     if( AObjectToControl )
       AObjectToControl->Enabled = true;
   }
};


--- CPP ---
Code:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TRAII_DisableEnable<TButton> E1( Button1 );
    TRAII_DisableEnable<TCheckBox> E2( CheckBox1 );

   // UradiNesto(); 
   Sleep( 3000 );

    // destruktor ce sve vratiti na mesto Enabled = true;
}

Re: Predložak klase 02.08.2006. u 07:56 · pre 246 meseci #9
Da... fora je u destruktoru. Hvala
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme