Šta je novo?

Interface C++

VUCKO-91

Slavan
Učlanjen(a)
21.08.2008
Poruke
330
Poena
319
Jel moze neko da mi objasni kako se pravi interface u c++
ne mislim na graficki interface, vec na klasu koja je interface, pa se njene metode implementiraju u drugim klasama.
Samo nemojte odgovore tipa "Izguglaj to malo.... " , posto se podrazumeva da je to prvo sto sam uradio i da nisam nasao nista sto bi mi to razjasnilo.
Razumem ideju , postoji klasa koja ima samo deklarisane funkcije cija se implementacija definise u drugim klasama...al kako se to pravi?
 
Poslednja izmena:
Kao što vidiš i sam, C++ nema interfejse, zato moramo da ih imitiramo. Nekakva konvencija je da se interfejsom smatra klasa koja ne nasleđuje ni jednu, nema ni jedno polje, ima samo čiste virtuelne metode (= 0) bez implementacije. U Qt biblioteci se poštuje ova interfejs konvencija, i ovakve klase su jedine koje su višestruko nasleđene, odnosno ni jedna klasa ne treba da nasledi više od jedne "prave" klase, već jednu pravu, a opciono jedanu ili više ovih specijalnih interfejs klasa.
 
npr...

Kod:
class INekiInterface
{
public:
   INekiInterface(){}
   virtual ~INekiInterface(){} // virt. destruktor je obavezan da bi se pozvali destruktori izvedenih klasa
   virtual void NekaFunc1(int a, float b) = 0;  // ovo je pure virtual func. Nema implementaciju, ali neka od izvedenih klasa mora da je implementira.
   virtual int NekaFunc2(int a, float b) = 0;  // ovo je pure virtual func. Nema implementaciju, ali neka od izvedenih klasa mora da je implementira.
}

class A: public INekiINterface
{
public:
   A(){}
   virtual ~A(){}
   virtual void NekaFunc1(int a, float b) {}
   virtual int NekaFunc2(int a, float b) {return a;}
}

ili

class B: public INekiINterface // Ovo je i dalje apstraktna klasa jer nedostaje implementacija NekaFunkcija2
{
public:
   B(){}
   virtual ~B(){}
   virtual void NekaFunc1(int a, float b) {}
}

class C: public B // ova klasa implementira i nedostajucu metodu B::NekaFunkcija2.
{
public:
   C(){}
   virtual ~C(){}
   virtual int NekaFunc2(int a, float b) {return a;}
}

B se ne moze instancirati
A i C se mogu instancirati
 
E ja sad imam situaciju da iz jednog objekta trebam da pozovem virtuelnu funkciju koja je definisana u drugom objektu, a da pritom ne pozivam taj objekat, vec da ih pozivam preko interface-a. Kako pozivam funkcije interface-a, kad on nema instancu? Jel dovoljno da tu klasu interface-a samo include u klasu objekta iz kojeg pozivam funkcije interface-a i to je to ?
nadam se da me razumete, usput hvala puno na odgovorima!
 
INekiInterface* x = new A;
X->NekaFunkcija1(........);
 
yooyo hvala puno, upravo mi je mentor na praksi razjasnio ovo sto si mi ti napisao.
 
Nazad
Vrh Dno