Witam,
Poza main'em mam funkcję void, do której (z main'a) chciałbym przekazać (jako argument) referencję do obiektu danej klasy np. samochod. Jak taka funkcja mogła by wyglądać ? tak ? : void funkcja(samochod sam)
Witam,
Poza main'em mam funkcję void, do której (z main'a) chciałbym przekazać (jako argument) referencję do obiektu danej klasy np. samochod. Jak taka funkcja mogła by wyglądać ? tak ? : void funkcja(samochod sam)
void funkcja(samochod& sam)
class bar { };
void foo(bar& arg)
{
}
int main()
{
bar obj;
foo(obj);
}
Nie chciałbym komplikować tutaj mojej wypowiedzi więc, pokażę na przykładzie, ale grunt to majac tablicę róznych obiektów chce wywołać funkcję w której argumentem jest jeden z obiektów, problem w tym, że są typu bazowa ale obiekt moze wskazywac na klase pochodną. Jest jakiś sposób aby to zadziałało ?
class Bazowa
{
Bazowa() {};
virtual void MCW() = 0;
}
class Pochodna1 : public Bazowa
{
void MCW1() {};
}
Class Pochodna2 : public Bazowa
{
void MCW2() {};
int lat() {return 1;};
}
class Pochodna3 : public Pochodna2
{
int rokUrodzenia() {return 2000;};
}
main.cpp
/*/#include (...)/*/
void poch1(Pochodna1& p1)
{}
void poch2(Pochodna2& p2)
{}
void poch3(Pochodna3& p3)
{}
int main()
{
Bazowa *tab[3];
tab[0]=new Pochodna1;
tab[1]=new Pochodna2;
tab[3]=new Pochodna3;
poch1(tab[0]);
poch2(tab[1]);
poch3(tab[2]);
return 0;
}
Kod który podałeś i tak się nie skompiluje bo klasy Pochodna* są klasami abstrakcyjnymi.
Nie mówiąc już o Class z dużej litery.
//tab[3]=new Pochodna3; // nie ma indeksu 3
tab[2]=new Pochodna3;
poch1(dynamic_cast<Pochodna1&>(*(tab[0])));
poch2(dynamic_cast<Pochodna2&>(*(tab[1])));
poch3(dynamic_cast<Pochodna3&>(*(tab[2])));
To po ci w takim razie ta tablica? W jaki sposób rozpoznajesz który obiekt przekazać do której funkcji? Drabinką ifów?
@Rev, nie koniecznie drabinka if,ów.
for(int i=0;i<3;++i)
{
try { poch1(dynamic_cast<Pochodna1&>(*(tab[i]))); } catch(...) {}
try { poch2(dynamic_cast<Pochodna2&>(*(tab[i]))); } catch(...) {}
try { poch3(dynamic_cast<Pochodna3&>(*(tab[i]))); } catch(...) {}
}
Aczkolwiek to nie zmienia słuszności uwagi.