[ danijel385 @ 08.05.2006. 18:41 ] @
Lijepi pozdrav,

nedavno sam poceo uciti c++, a vec imam nekoliko problema/pitanja... Naime jedan frend mi je preporucio da c++ ucim iz ove knjige: Demistificirani C++...

Posto nikako nisam mogao pronaci sto znace ove naredbe u toj knjizi, nadam se da ce netko imati vremena da mi ih malo pojasni...

Ovo je nekoliko programa koje sam nasao na netu...

Code:


#include <iostream>
# include <stdio.h>
# include <stdlib.h>

using namespace std;

class vektor 
{
    private: int i;
    private: int j;
    private: int k;
    friend int main(void);
    friend int skalarni(vektor, vektor);
    friend vektor vektorski(vektor, vektor);
    friend int ispis(vektor, vektor);
};


int skalarni(vektor a, vektor b)
{
    int s;
    s = (a.i*b.i) + (a.j*b.j) + (a.k*b.k);
    return s;
}

vektor vektorski(vektor a,vektor b)
{
    vektor v;
    v.i = (a.j*b.k) - (a.k*b.j);
    v.j = (a.k*b.i) - (a.i*b.k);
    v.k = (a.i*b.j) - (a.j*b.i);
    return v;
}

int ispis(vektor a, vektor b)
{
    vektor v;
     printf("\n   --> Skalarni produkt upisanih vektora je s = %d",  skalarni(a, b) );
     v = vektorski(a, b);
     printf("\n   --> Vektorski produkt upisanih vektora je v = (%d,%d,%d) \n\n ", v.i, v.j, v.k );
     return 0;
}

int main(void)
{
    vektor a, b;
    
    printf("   --> Upis vektora a ! \n");
    printf("   --> Upisi ax vektora a : ");
    scanf("%d", &a.i);
    printf("   --> Upisi ay vektora a : ");
    scanf("%d", &a.j); 
    printf("   --> Upisi az vektora a : ");
    scanf("%d", &a.k); 

    printf("   --> Upis vektora b ! \n");
    printf("   --> Upisi bx vektora b : ");
    scanf("%d", &b.i); 
    printf("   --> Upisi by vektora b : ");
    scanf("%d", &b.j); 
    printf("   --> Upisi bz vektora b : ");
    scanf("%d", &b.k); 
    
    ispis(a,b);
    
    return 0;
}


U ovome me zanima cemu sluzi naredbe:

Code:

using namespace std;


Code:

        friend int main(void);
    friend int skalarni(vektor, vektor);
    friend vektor vektorski(vektor, vektor);
    friend int ispis(vektor, vektor);


Drugi program:
Code:

#include <stdio.h>
#include <iostream> 
#include <string> 

using namespace std; 

class Popis

private:  
        int brUcenika; 
        string *ListaUcenika;     
public: 
    Popis (); 
    ~Popis(); 
    void ispis();
    void dodaj(); 
    void dodaj(string s); 
    void brisi();    
}; 

Popis::Popis(): brUcenika(0) , ListaUcenika (new string[20]) {} 

Popis::~Popis() 

        delete [] ListaUcenika;  


void Popis::ispis(void)

        int i; 
        if (brUcenika!=0) 
        { 
                cout << endl << "\n   --> popis studenata: "<< endl; 
                for (i=0; i < brUcenika; i++) 
                        cout << ListaUcenika[i] <<endl; 
        }
    cout << "..." << endl; 


void Popis::dodaj(void) 

        int i; 
        string ime,prezime,ucenik;
    cout <<"\n   --> ime: "; 
    cin>>ime;
    cout <<"\n   --> prezime: "; 
    cin>>prezime;
    ucenik=ime+" "+prezime;    
    brUcenika++;
    string* pomocni =new string[brUcenika];       
    for (i=0;i<brUcenika-1;i++)                
                { 
                       pomocni[i]=ListaUcenika[i];
                } 
    pomocni[brUcenika-1]=ucenik;
    ListaUcenika=new string[brUcenika]; 
    for (i=0;i<brUcenika;i++)  
         {
            ListaUcenika[i]=pomocni[i];
         }
    delete [] pomocni;
    cout << "\n   --> Student je upisan."<< endl;    


void Popis::dodaj(string ucenik) 

        int i; 
       brUcenika++;
       string* pomocni =new string[brUcenika];
       for (i=0;i<brUcenika-1;i++)                
                { 
                       pomocni[i]=ListaUcenika[i];
                } 
    pomocni[brUcenika-1]=ucenik;
    ListaUcenika=new string[brUcenika]; 
    for (i=0;i<brUcenika;i++)  
         {
            ListaUcenika[i]=pomocni[i];
         }
    delete [] pomocni;
           



void Popis::brisi(void) 

        int i, flag=0; 
        string ime,prezime,ucenik;
    cout <<"\n   --> ime: "; 
    cin>>ime;
    cout <<"\n   --> prezime: "; 
    cin>>prezime;
    ucenik=ime+" "+prezime;
    for (i=0;i<brUcenika;i++)                
        { 
                if (ListaUcenika[i]==ucenik) 
            {
                flag=1;
            }
    }
    if(! flag)
        {
            cout << "\n   --> Student nije naveden u bazi." << endl; 
            return; 
        }
    flag=0;
    brUcenika--; 
    string* pomocni=new string[brUcenika];
        for (i=0;i<brUcenika;i++)                
        { 
                if (ListaUcenika[i]==ucenik) 
                {
                    flag=1;
                }
                if(flag)
                {
                     pomocni[i]=ListaUcenika[i+1];
                }
                else
                {
                    pomocni[i]=ListaUcenika[i];
                }
        }    
        ListaUcenika=new string[brUcenika];
        for(i=0;i<brUcenika;i++)
        ListaUcenika[i]=pomocni[i];
        delete [] pomocni;
        cout << "\n   --> Student je obrisan." << endl; 
}

int main() 

    Popis popis;
    char izbor;
    do
    {
        switch (izbor)
        {
               case '1': popis.ispis();
               break;
               case '2': popis.dodaj();
               break;
               case '3': popis.brisi();
               break;
               default: 
               break;
        }
    cout<<"\n   --> 1. Ispis prisutnih studenata"<<endl;
    cout<<"\n   --> 2. Upis novog studenta"<<endl;
    cout<<"\n   --> 3. Brisanje studenta"<<endl;
    cout<<"\n   --> 4. Kraj"<<endl;
    cout<<"\n   --> Vas odabir : " ;
    cin>>izbor;
    }
    while(izbor != '4');
    return 0;



Ovdje me zanima cemu sluze ove naredbe(pogotovo ::):
Code:

    ~Popis(); 

        Popis::Popis(): brUcenika(0) , ListaUcenika (new string[20]) {} 
        Popis::~Popis() 


Posljednji program:
Code:

#include<iostream>

using namespace std;

enum Figura
{
    prazno, 
    bijelipjesak, 
    bijelitop, 
    bijelikonj, 
    bijelilovac, 
    bijelakraljica, 
    bijelikralj, 
    crnipjesak, 
    crnitop, 
    crnikonj, 
    crnilovac, 
    crnakraljica, 
    crnikralj
};

class sahPolje
{
    private:
    Figura figurica; 
    public: 
    sahPolje(); 
    void namjesti(Figura fig); 
    Figura kojaFig(); 
};

sahPolje::sahPolje() : figurica(static_cast<Figura>(0))
{
};

void sahPolje::namjesti(Figura fig)
{
    figurica = fig;
}

Figura sahPolje::kojaFig()
{
    return figurica;
}

void stanje(sahPolje Sahovnica[][8])
{
    int i, j;
    for(i = 0; i < 8; i++)
        {
            for(j = 0; j < 8; j++)
                {
                    cout.width(4);
                    cout << Sahovnica[i][j].kojaFig();
                }
            cout << endl;
        }
}

int main()
{
    int i, j;
    sahPolje Sahovnica[8][8];
    Sahovnica[0][0].namjesti(crnitop);
    Sahovnica[0][1].namjesti(crnikonj);
    Sahovnica[0][2].namjesti(crnilovac);
    Sahovnica[0][3].namjesti(crnikralj);
    Sahovnica[0][4].namjesti(crnakraljica);
    Sahovnica[0][5].namjesti(crnilovac);
    Sahovnica[0][6].namjesti(crnikonj);
    Sahovnica[0][7].namjesti(crnitop);
    for(i = 0; i < 8; i++)
        Sahovnica[1][i].namjesti(crnipjesak);
    for(i = 2; i < 6; i++)
        {
            for(j = 0; j < 8; j++)
            Sahovnica[i][j].namjesti(prazno);
        }
    for(i = 0; i < 8; i++)
        Sahovnica[6][i].namjesti(bijelipjesak);
    Sahovnica[7][0].namjesti(bijelitop);
    Sahovnica[7][1].namjesti(bijelikonj);
    Sahovnica[7][2].namjesti(bijelilovac);
    Sahovnica[7][3].namjesti(bijelikralj);
    Sahovnica[7][4].namjesti(bijelakraljica);
    Sahovnica[7][5].namjesti(bijelilovac);
    Sahovnica[7][6].namjesti(bijelikonj);
    Sahovnica[7][7].namjesti(bijelitop);
    stanje(Sahovnica);
    return 0;
}



U ovom zadatku me zanima cemu sluzi:
Code:

static_cast


Znam da je jako dugacak post... Ispricavam se...
[ DjoleReject @ 08.05.2006. 23:14 ] @
using namespace std
-U ovom trenutku (predpostavljam da si pocetnik) nije bas potrebno da ulazis u sustinu namespace-ova. Pojednostavljeno receno, ukoliko bi radio u nekom vecem projektu (posebno predstavlja problem projekat sa mnogo programera) postoji velika mogucnost da na razlicitim mestima funkcije dobiju isto ime. To se izbegava tako sto naglasis iz kog namespace-a su imena tvojih funkcija. Posto si ovim redom naglasio da se koristis standardnim (std), sprecio si moguce konflikte. (celo ovo objasnjenje uzmi s dozom rezerve, jer nit` ja imam ovde mesta da detaljisem, nit` ti jos uvek imas predznanje da u potpunosti skontas situacije u kojima ces ovo koristis. Uzmi zdravo za gotovo da posle svih includa otkucas i ovaj red.

friend...
Unutar klase je moguce deklarisati neku funkciju koja je definisana negde izvan nje. Ovime postizes da ta f.-ja ima pravo pristupa privatnim clanovima klase u kojoj je deklarisana. Nisam siguran da je ovo sustina tvog pitanja, a ako nije - ti pitaj konkretnije.

::
Kada izvan klase zelis da se obratis nekoj funkciji koja je deo klase (metoda), to naglasis tako sto napises ImeKlase::imeFunkcije(). Ovo je neophodno, jer ime funkcije definisane u klasi ne moze da se vidi izvan nje ako ne kazes gde je. Shvati ovo kao neki vid putanje do funkcije.

~ImeKlase
Ovo je destruktor. Potrebu da se on pravi ne mogu da ti ovde objasnjavam, a ako je nema ni u doticnoj knjizi - menjaj knjigu!
Ukratko, ovo je funkcija cija je jedina svrha da obrise sve u objektu, nakon njegovog unistavanja. Ukoliko je nema, moze doci do "memory leak-a", gde su ti blokovi memorije ostali alocirani, a ne sluze nicemu.

Jel` to sve? :)

[Ovu poruku je menjao DjoleReject dana 09.05.2006. u 00:16 GMT+1]
[ danijel385 @ 09.05.2006. 00:48 ] @
Da, sorry, zaboravio sam napomenuti da sam pocetnik

Mislim da je to sve... Ako bude jos pitanja, budem se javio...

Puno hvala...