virutalne funkcje c++

0

Mam taki problem:

 #include <iostream>
#include <string>

using namespace std;

class tablica{
public:
	void virtual funkcja_wyswietlajaca()
	{
		cout << "Policja \nPolice";
	};
};
class przekroczenie_predkosci : tablica{
public:
	void funkcja_wyswietlajaca()
	{
		cout << "Przekroczyles predkosc!\nJedz za mna\nexceeded the speed\nFollow Me!";
	}
};
class wypadek_drogowy : tablica{
public:
	void funkcja_wyswietlajaca()
	{
		cout << "Policja \nPolice\nWypadek";
	}
};
class inne_wykroczenie : tablica{
public:
	void funkcja_wyswietlajaca()
	{
		cout << "Policja \nPolice\nZagrozenie dla ruchu\nZachowaj ostroznosc";
	}
};

int main()
{
	tablica tablica_wyswietlajaca;
	przekroczenie_predkosci predkosc;
	wypadek_drogowy wypadek;
	inne_wykroczenie inne;
	int a;
	cout << "Wybierz opcje:\n1-wypadek\n2-przekroczenie predkosci\n3-inne zagrozenie\n";
	cin >> a;
	tablica *wskaznik;
	/*
	myślałem tutaj nad funkcją if ale nic jak dotąd mi się nie udało
	udało mi się zrobić jedynie takie coś:
	wskaznik = &tablica_wyswietlajaca;
	wskaznik-> funkcja_wyswietlajaca();
	niestety wyswietla to jedynie policja/police jednak ja bym chcial aby to szlo zrobic tak aby wyswietlalo też inne funkcje typu: wypadek
	jednak jak przekieruje ten wskaznik na inna klase to mi sie on nie kompiluje
	*/
	cin.ignore();cin.get();
}

problem polega na tym tak jak w komentarzu nie umiem zrobić tego aby wyświetlał coś innego
nie chcę tutaj komend typu: "switch" i "case" bo ja chce po prostu nauczyć się programować a nie piszę tego programu na żaden wykład ani nic w tym stylu

0

No ale przecież cudów nie zdziałasz. Jak chcesz żeby użytkownik wybrał sobie jaki typ obiektu ma być otworzony to musisz to jakoś zaprogramować i już. Jak ci się if/switch nie podoba to wrzuć to do mapy jakiejś, albo poszukaj sobie kotenera IoC.

0

W Symfonii C++ miałem taki kawałek kodu:

 
instrument *wskinstr;

wskinstr = &jakis_instrument;
wskinstr-> wydaj_dzwiek();

wskinstr = &zlota_trabka;
wskinstr-> wydaj_dzwiek();

wskinstr = &steinway_giseli;
wskinstr-> wydaj_dzwiek();

wskinstr = &moj_werbel
wskinstr-> wydaj_dzwiek();

i mu to (niby) działało a jak ja dam np.

 wskaznik = &predkosc 

to mi nie zadziała...
(jakby co to jest ta symfonia nie standard i jest to tom III strona 554 - jak ktoś naprawdę chce to zobaczyć)

0

Bo kodu nawet przepisać nie umiesz i nie umiesz czytać błędów...
http://ideone.com/3xAXy
domyślne dziedziczenie jest private...

0

ale nie wiem co chcesz

funkcje wirtualne ci nie zastąpią podstawowych instrukcji jak switch czy if...

jedyne możliwewykorzystanie tutaj funkcji wirtualnych to:
http://ideone.com/wN7SB

0

Dzięki wam... :)
Ja zapomniałem dać słowo "public" i to przez to kompilator dawał mi błąd tak poza używam tego if tylko mi przedtem nie wychodziło tak jak miało z tym wskaźnikiem bo dziedziczenie było prywatne
Temat wolno zamknąć :)

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