Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

malo pitanje ---> pitanjce ; sto je fora u kodu???

[es] :: C/C++ programiranje :: malo pitanje ---> pitanjce ; sto je fora u kodu???

[ Pregleda: 4465 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

star-Mo

Član broj: 1597
Poruke: 32
*.tel.net.ba.



Profil

icon malo pitanje ---> pitanjce ; sto je fora u kodu???14.12.2004. u 16:38 - pre 235 meseci
Pozdrav *

Imam jedno malo pitanjce sa jednog ispitnog roka koje bas i ne kuzim, pa ako nije problem da netko pomogne; ono sto ne kuzim oznacio sam kao komentar u kodu

Pitanje je :
Razmotrite slijedeći primjer!

Code:
 #include <iostream>

using namespace std;

class Osoba //pravi klasu osoba
{
public:
    void Ispis()  //metoda pristupa(funkcija clanica ) klase osoba
        { cout << "Ispis iz Osoba" << endl; }
};

class Uposlenik: public Osoba  /* izvedena klasa Uposlenik, osnovna klasa je Osoba tip nasljedjivanja/izvodjenja je public; koliko kuzim ovo znaci da ce svi clanovi osnovne klase biti dostupni objektima izvedene klase ????*/
{
public:
    void Ispis()
        { cout << "Ispis iz Uposlenik" << endl; }
};

void tester1(Osoba &a) /* ovo ne kontam; molim ako moze netko da i objasni*/
{
    a.Ispis();
}
void tester2(Osoba a) /* i ovo mi je zbunjoza ????? */
{
    a.Ispis();
}
void main()
{
    Osoba os;
    tester1(os);
    tester2(os);

    cout << "----------" << endl;

    Uposlenik up;
    tester1(up);
    tester2(up);
}
 


a) Šta će biti rezultat (ili greška) pokretanja prikazanog programa (dati i pojašnjenje)

b) Šta bi bio rezultat programa ukoliko se funkcija "Osoba::Ispis()" deklariše ovako:

virtual void Ispis()

Kad ovo kompajliram dobijem output :

Ispis iz Osoba
Ispis iz Osoba
----------
Ispis iz Osoba
Ispis iz Osoba

A kad stavim virtual ( slucaj b ) output je :

Ispis iz Osoba
Ispis iz Osoba
----------
Ispis iz Uposlenik
Ispis iz Osoba

Ako ima kakva dobra dusa koja moze i zeli "otvoriti oci" meni neukom co'jeku unaprijed hvala...
 
Odgovor na temu

TheAlas
Bojan Sala
Senior Software Eng
IGT
Beograd

Član broj: 36584
Poruke: 119
*.nat-pool.bgd.sbb.co.yu.



+1 Profil

icon Re: malo pitanje ---> pitanjce ; sto je fora u kodu???15.12.2004. u 11:49 - pre 235 meseci
Evo jednostavnije verzije tvog koda:

Code:

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

using namespace std;

/*
    CLASS Osoba
*/
class Osoba //pravi klasu osoba
{
public:
    virtual void Ispis() 
        { cout << "Ispis iz Osoba" << endl; }
};

/*
    CLASS Uposlenik
*/
class Uposlenik: public Osoba
{
public:
    void Ispis()
        { cout << "Ispis iz Uposlenik" << endl; }
};


/* TESTIRANJE */
void tester1(Osoba *a) /* ovo ne kontam; molim ako moze netko da i objasni*/
{
    a->Ispis();
}

void tester2(Osoba a) /* i ovo mi je zbunjoza ????? */
{
    a.Ispis();
}


void main()
{
    Osoba os;
    tester1(&os);
    tester2(os);

    cout << "---------- UPOSLENIK:" << endl;

    Uposlenik up;
    tester1(&up);
    tester2(up);

     // sada koristimo virtuelnu funckiju
     Osoba *pt_os;
     pt_os = &up;
     pt_os->Ispis ();

     printf ("\npritisni nesto za izlaz\n");
     getch();
}


Vidis, ako osoba pokazuje na uposlenika, onda se vrsi Uposlenik::Ispis, ako ne onda se vrsi samo Osoba::Ispis. Virutelna fukncija ti daje da biras koju verziju Ispis funkcije zelis da koristis.
Nadam se da kapiras, otvori ovaj kod gore i prouci, obrati paznju na ovo:

Code:

     Osoba *pt_os;
     pt_os = &up;
     pt_os->Ispis ();


E ovde se poziva Uposlenik::Ispis jer si u osobi naznacio virtual void Ispis(), a Osoba pokazuje na Uposlenika pa poziva verziju iz te klase... malo je tesko objasniti, ali valjda kontas.

Uostalom, evo objasnjenja iz msdna, tu ti je cak vrlo slican primer koriscenja virtuelnih funckija:

Example 1

Code:

class WageEmployee
{
public:
   virtual float computePay();
};

class SalesPerson : public WageEmployee
{
public: 
   float computePay();
};

You can execute different versions of computePay( ) depending on the type of object you're calling it for.

Example 2

Code:

WageEmployee aWorker;
SalesPerson aSeller;
WageEmployee *wagePtr;

wagePtr = &aWorker;
wagePtr->computePay();   // call WageEmployee::computePay
wagePtr = &aSeller;
wagePtr->computePay();   // call SalesPerson::computePay
 
Odgovor na temu

TheAlas
Bojan Sala
Senior Software Eng
IGT
Beograd

Član broj: 36584
Poruke: 119
*.nat-pool.bgd.sbb.co.yu.



+1 Profil

icon Re: malo pitanje ---> pitanjce ; sto je fora u kodu???15.12.2004. u 11:59 - pre 235 meseci
Da, i zamenio sam ono &a sa *a jer je lakse za shvatanje, pointeri su ionako zeznuti, samo mazohista bi ih komplikovao jos vise.

Znaci ako prosledis klasu Uposlenik klasi Osoba, onda ce naravno da se koristi Uposlenik::Ispis (), to si uradio ovde:
tester1(&up);
Ovo vazi samo ako je funckija virutelna.

Kod public nema sta da se zbunis, ako stavis private, funkcija je dostupna samo iz te klase, recimo ako pravis komplikovanu klasu sigurno ces dodavati neke pomocne private funckije koje su nevidiljive izvan zagradica te klase.
 
Odgovor na temu

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
195.252.80.*

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: malo pitanje ---> pitanjce ; sto je fora u kodu???15.12.2004. u 18:59 - pre 235 meseci
Zasto niko ne koristi standardna imena datoteka zaglavlja?
Sto umesto <stdio.h> jednostavno ne stavite <cstdio>, kada ste vec poceli po ISO.
 
Odgovor na temu

vlaiv
Vladimir Vlaisavljevic
Novi Sad

Član broj: 15993
Poruke: 352
*.dialup.neobee.net.



+1 Profil

icon Re: malo pitanje ---> pitanjce ; sto je fora u kodu???16.12.2004. u 21:20 - pre 235 meseci
Jedan momenat koji bih istakao:

U gore navedenom kodu se & koristi kao referenca a ne adresa, tako da mislim da je totalno irelevantno ubacivati pointere da bi se pojasnio ovaj primer ...
 
Odgovor na temu

TheAlas
Bojan Sala
Senior Software Eng
IGT
Beograd

Član broj: 36584
Poruke: 119
*.nat-pool.bgd.sbb.co.yu.



+1 Profil

icon Re: malo pitanje ---> pitanjce ; sto je fora u kodu???17.12.2004. u 00:43 - pre 235 meseci
J smatram da je jednostavnije, Vi pisite kod kako god zelite.
Diskusija o necijem stilu programiranja nema kraja.
 
Odgovor na temu

[es] :: C/C++ programiranje :: malo pitanje ---> pitanjce ; sto je fora u kodu???

[ Pregleda: 4465 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.