• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Probelm z wyświetlenie obiektów tablicy c++

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
0 głosów
509 wizyt
pytanie zadane 11 maja 2016 w C i C++ przez sebask08 Użytkownik (510 p.)

#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

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

1 odpowiedź

0 głosów
odpowiedź 11 maja 2016 przez softkdp Obywatel (1,060 p.)
wybrane 12 maja 2016 przez sebask08
 
Najlepsza

Stworzyłeś tablicę wskaźników na obiekt typu Figura. W formie obecnej możesz spróbować: cout << tablica[1]->Nazwa() << endl; jako że operujesz na wskaźnikach.

komentarz 12 maja 2016 przez sebask08 Użytkownik (510 p.)
Dziękuje, tak włąsnie zrobiłem :D

Podobne pytania

0 głosów
1 odpowiedź 187 wizyt
0 głosów
1 odpowiedź 567 wizyt
0 głosów
1 odpowiedź 300 wizyt
pytanie zadane 31 grudnia 2018 w C i C++ przez Teslum_369 Gaduła (4,190 p.)

91,832 zapytań

140,505 odpowiedzi

316,991 komentarzy

61,163 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...