polimorfizm

0

mam do zrobienia takie zadanie: sprawdzić możliwość wykorzystania metod wirtualnych na kolekcji vector obiektów oraz vector wskaźników na obiekty. Z tym drugim sobie poradziłam, niestety nie wiem jak zrobić to zadanie bez wskaźników.

#include <iostream>
#include <vector>
using namespace std;
class bryla
{
public:
	virtual float objetosc() {
		return 0;
	}
};

class szescian : public bryla
{
private:
	float a;
public:
	szescian(float a) {
		this->a = a;
	}
	float objetosc() {
		return (a * a * a);
	}
};

class prostopadloscian : public bryla
{
private:
	float a, b, c;
public:
	prostopadloscian(float a, float b, float c) {
		this->a = a;
		this->b = b;
		this->c = c;
	}
	float objetosc() {
		return a * b * c;
	}
};

class stozek : public bryla
{
private:
	float r, h;
	const float pi = 3.14;
public:
	stozek(float r, float h) {
		this->r = r;
		this->h = h;
	}
	float objetosc() {
		return ((pi * r * r * h) / 3);
	}
};

int main()
{
	vector <bryla*> b;
	b.push_back(new szescian(4));
	b.push_back(new prostopadloscian(8,2,7));
	b.push_back(new stozek(3, 6));
	for (int i = 0; i < 3; i++)
		cout << b[i]->objetosc() << endl;
	return 0;
}

to jest z uzyciem wskaźników.

a tu probowlam zrobic bez:

int main()
{
	vector <bryla> b;
	b.push_back(szescian(4));
	b.push_back(prostopadloscian(8, 2, 7));
	b.push_back(stozek(3, 6));
	for (int i = 0; i < 3; i++)
	{
		cout << b[i].objetosc() << endl;
	}
	return 0;
}

wyswietla mi na kosoli same 0, probowalam cos z iteratorami ale tez nie dziala :(

0

To drugie jest bez sensu. Może prowadzącemu chodziło o użycie unique_ptr?W przeciwnym razie zrób po prostu wektor jednego typu i tyle.

0

Zwróć dokładną uwagę że dostajesz dokładnie wynik z metody objetosc() klasy bryla.
Do wygooglania zostawię ci object slicing :)

Jak dalej nie jesteś pewnny to najlepiej skontaktuj się z wykładowcą ;)

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