programowanie c++
m: Czy mógłbym prosić o jakiś przykład i wytłumaczenie asocjacji ze wskaźnikami innej klasy
class CFoo {/* jakiś kod */ };
class CBar
{
private:
CFoo* m
pFoo;
public:
void UstawRelacje(CFoo* pFoo) { m
pFoo=pFoo;}
};
Na przykład na tym programie, jak mogę wykorzystać ten wskaźnik m
pFoo
18 sie 13:25
Dziadek Mróz:
#include <iostream>
#include <string>
class Aktor {
public:
std::string ImieNazw;
Aktor(std::string imieNazw) : ImieNazw(imieNazw) {}
};
class Film {
public:
std::string Tytul;
Aktor *GlownaRola;
Film(std::string tytul, Aktor *glownaRola) : Tytul(tytul) {
GlownaRola = glownaRola;
std::cout << Tytul << "\nW glownej roli wystepuje " << GlownaRola−>ImieNazw << std::endl;
}
};
int main() {
Aktor *aktor1 = new Aktor("Cezary Pazura");
Film *film1 = new Film("Kiler", aktor1);
return 0;
}
http://ideone.com/JQjaa2
18 sie 16:10
m: dzięki bardzo
Ale mam jeszcze pytanie, jaka jest tak właściwie różnie pomiędzy tym a agregacją, bo tej
różnicy właśnie też trochę nie łapie
18 sie 20:28
Dziadek Mróz:
http://ideone.com/O4HuTk
Asocjacja, istnieje jakiekolwiek powiązanie klas:
class Aktor {
public: std::string ImieNazw;
};
class Film {
public:
std::string Tytul;
Aktor *GlownaRola;
};
Agregacja, Asocjacja z tym, że obiekty są rozłączne:
Film(std::string tytul, Aktor *glownaRola) : Tytul(tytul) {
GlownaRola = glownaRola;
std::cout << Tytul << "\nW glownej roli wystepuje " << GlownaRola−>ImieNazw << std::endl;
}
obiekt
glownaRola istnieje poza klasą Film
Kompozycja, Asocjacja z tym, że obiekt posiada inny obiekt:
Film(std::string tytul) : Tytul(tytul) {
GlownaRola = new Aktor();
std::cout << Tytul << "\nW glownej roli wystepuje " << GlownaRola−>ImieNazw << std::endl;
}
obiekt
glownaRola istnieje wewnątrz klasy Film
19 sie 07:21
m: dziękuję bardzo
20 sie 00:51
p: Przeczytalem gdzies, że agregacja to zawieranie, to jak się zawiera jak istnieje poza klasą ?
20 sie 01:02
p: Wszystko już jasne, zrozumiałem. Fajne przykłady
20 sie 01:08