Przekazanie referencji do obeiktu jako argumentu

0

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)

1
void funkcja(samochod& sam) 
1
class bar { };

void foo(bar& arg)
{

}

int main()
{
	bar obj;

	foo(obj);
}
0

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;
}
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])));
0

To po ci w takim razie ta tablica? W jaki sposób rozpoznajesz który obiekt przekazać do której funkcji? Drabinką ifów?

0

@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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1