#include "stdafx.h"
#include <iostream>
#include <string>
#include <stdio.h>
#include <conio.h>
#include <fstream>
#include <cstdlib>
using namespace std;
class Figura
{
public:
virtual string Nazwa()=0;
virtual double Obwod()=0;
virtual double PolePowierzchni()=0;
};
class Prostokat : public Figura
{
private:
int a;
int b;
public:
Prostokat(string Opis, int x, int y)
:a(x),
b(y)
{
}
virtual string Nazwa(){return "Prostokat";};
virtual double Obwod(){return a+a+b+b;};
virtual double PolePowierzchni(){return a*b;};
};
class Kwadrat : public Figura
{
private:
int a;
public:
Kwadrat(string Opis, int x)
:a(x)
{
}
virtual string Nazwa(){return "Kwadrat";};
virtual double Obwod(){return a+a+a+a;};
virtual double PolePowierzchni(){return a*a;};
};
class Kolo : public Figura
{
private:
int a;
public:
Kolo(string Opis, int x)
:a(x)
{
}
virtual string Nazwa(){return "Kolo";};
virtual double Obwod(){return 2*3.1415*a;};
virtual double PolePowierzchni(){return 3.1415*a*a;};
};
class Elipsa : public Figura
{
private:
int a;
int b;
public:
Elipsa(string Opis, int x, int y)
:a(x),
b(y)
{
}
virtual string Nazwa(){return "Elipsa";};
virtual double Obwod(){return a+a+b+b;};
virtual double PolePowierzchni(){return 3.1415*a*b;};
};
int _tmain(int argc, _TCHAR* argv[])
{
fstream plik;
string licz;
int licznik=0;
int x;
int y;
plik.open("plik.txt", ios::in);
if (plik.good()==false) cout<<"Nie ma pliku"<<endl;
while (getline(plik,licz))
{
licznik++;
}
plik.close();
plik.open("plik.txt", ios::in);
if(plik.good()==false) cout<<"Blad otwarcia pliku";
Figura *tablica[20];
string Opis;
for (int i = 0; i<(licznik/2)-1; i++)
{
plik>>Opis;
if (Opis == "prostokat")
{
plik>>x;
plik>>y;
tablica[i]=new Prostokat(Opis, x, y);
}
if (Opis == "kwadrat")
{
plik>>x;
tablica[i]=new Kwadrat(Opis, x);
}
if (Opis == "kolo")
{
plik>>x;
tablica[i]=new Kolo(Opis, x);
}
if (Opis == "elipsa")
{
plik>>x;
plik>>y;
tablica[i]=new Elipsa(Opis, x, y);
}
i++;
}
_getch();
return 0;
}
zawartość pliku tekstowowego:
prostokat
2
8
kwadrat
3
kolo
4
elipsa
2
3
Witam,
Mam problem z wyświetleniem obiektów tych klas. Dlaczego nie mogę tego zrobić tak:
cout <<tablica[1].Nazwa()<<endl;
Ewentulanie proszę o link do jakiegoś materiału tłumaczącego deklarowanie tablicy obiektów w C++.