sigurno ti je vec kasno za domaci,ali evo kako se takve stvari rade,da znas za ubuduce

:
imas klasu A koja sadrzi B(tacnije pointer na objekat klase B,koji se inicijalizuje u konstruktoru od A i unistava u destruktoru od A).
B ima pointer na IA interfejs (koga implementira klasa A), pa onda sve metode koje si deklarisao u IA kao pure virtual, mozes da pozoves iz B... samo vodi racuna:
1. sve metode koji su pure virtual,moras da implementiras u klasi koja nasledjuje taj interfejs
2. treba u nekom trenutku da prosledis klasi B pointer na konkretan objekat koji je drzi i cije ces metode pozivati(u ovom slucaju SomeMethod() iz A), i najbolje mesto da to uradis je u konstruktoru B klase,jer inace postoji verovatnoca da ces to negde zaboraviti da inicijalizujes,a onda neces imati pojma gde si pogresio
Code:
//A.h
#ifndef __A_H__
#define __A_H__
#include <iostream>
#include "b.h"
class A : public IA {
private:
B* m_pB;
public:
A();
virtual ~A();
void FooA();
void SomeMethod();
};
#endif // __A_H__
Code:
//A.cpp
#include "a.h"
using namespace std;
A::A() {
m_pB = new B(this);
}
A::~A() {
if (m_pB != NULL) delete m_pB;
}
void A::FooA() {
cout << "Foo A..." << endl;
m_pB->FooB();
}
void A::SomeMethod() {
cout << "member of type B called method form A..." << endl;
}
Code:
//B.h
#ifndef __B_H__
#define __B_H__
#include <iostream>
#include "IA.h"
class B {
private:
IA* m_pIA;
public:
B(IA* pIA);
virtual ~B();
void FooB();
};
#endif // __B_H__
Code:
//B.cpp
#include "b.h"
using namespace std;
B::B(IA* pIA) {
m_pIA = pIA;
}
B::~B() {
}
void B::FooB() {
cout << "Foo B..." << endl;
m_pIA->SomeMethod();
}
Code:
//IA.h
#ifndef __IA_H__
#define __IA_H__
class IA {
public:
virtual void SomeMethod() = 0L;
};
#endif // __IA_H__
Code:
//main.cpp
#include "A.h"
int main(int nArgc, char** pszArgs) {
A a;
a.FooA();
return 0;
}
PS.
NIKADA ne koristi #pragma once, ti makroi ne rade uvek-znam iz licnog iskustva, uvek pravi ovako
Code:
#ifndef __imefajla_h__
#define __imefajla_h__
.... kod ovde...
#endif
ja sam panker sa diplomom kod moje mame...