Jak w temacie, posiadam problem tego typu, że nie moge utworzyć zmiennej typu vector<Bryla> v; błąd: error C2259: 'Bryla' : cannot instantiate abstract class. Zmiana na vector<Szescian> v; pomaga, jednakże chce utworzyć vector, ktory bedzie przechowywał wszystkie bryły.
#include "stdafx.h"
#include "stdlib.h"
#include "time.h"
#include <vector>
#include "string.h"
#include <list>
using namespace std;
class Bryla
{
string nazwa;
public:
Bryla(string nazwa)
{
this->nazwa = nazwa;
}
void WyswietlNazwe()
{
printf("%s\n", nazwa.c_str());
}
virtual double Objetosc()=0;// nie jest istotne dzialanie funkcji
};
class Szescian : public Bryla
{
double dlBoku;
public:
Szescian(double fdlBoku) :Bryla("szescian")
{
dlBoku=fdlBoku;
}
Szescian(double fdlBoku, string nazwa) :Bryla(nazwa)
{
dlBoku=fdlBoku;
}
double Objetosc()
{
return dlBoku*dlBoku*dlBoku;
}
};
/*
class Kula : public Bryla
{
double dlpromien;
public:
double Objetosc()
{
return dlpromien;
}
};*/
class ZbiorBryl
{
vector<Bryla> v;
public:
void DodajSzescian(Szescian s)
{
v.push_back(s);
}
double ObliczObjetosc()
{
double suma = 0;
for(vector<Bryla>::iterator i = v.begin(); i!=v.end(); i++)
{
suma +=i->Objetosc();
}
return suma;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
Szescian nowy0(5,"szescian");
Szescian nowy1(23,"szescian");
Szescian nowy2(3,"szescian");
Szescian nowy3(2,"szescian");
Szescian nowy4(1,"szescian");
Szescian nowy5(4,"szescian");
Szescian nowy6(15,"szescian");
//printf("%f",nowy0->Objetosc());
ZbiorBryl zbiorbryl;
zbiorbryl.DodajSzescian(nowy0);
zbiorbryl.DodajSzescian(nowy1);
zbiorbryl.DodajSzescian(nowy2);
zbiorbryl.DodajSzescian(nowy3);
printf("Objetosc wynosi: %f",zbiorbryl.ObliczObjetosc());
return 0;
}