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

Tablica obiektów C++ problem

0 głosów
1,019 wizyt
pytanie zadane 11 maja 2016 w C i C++ przez sebask08 Użytkownik (510 p.)
edycja 11 maja 2016 przez sebask08
#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;
		cout<<Opis<<endl;
		
        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;
}

Witam,

Mam problem z tablicą obiektów uczę sie na podstawie programów napisanych przez ludzi z roku wyżej. Problem polega na tym, że mam zadeklarowana tablica:

Figura *tablica[20]; //to jest klasa bazowa

 tablica[1]=new Prostokat(Opis, x, y); // tak jest zadeklarowana element tej tablicy klasy pochodnej

I jak wyświetlić obiekty tej klasy. Ewentualnie bardzo bym był wdzięczy o podesłanie materiałów który by mi wyjaśniły o co chodzi w deklaracji tablicy obiektów.

 

2 odpowiedzi

0 głosów
odpowiedź 11 maja 2016 przez criss Mędrzec (172,570 p.)
wybrane 12 maja 2016 przez sebask08
 
Najlepsza
Czyli o co ci w końcu chodzi bo nie wiem? Wyświetlić obiekt? Nie możesz tak po prostu wyświetlić jakiegokolwiek obiektu.. Wypisać możesz tylko typy podstawowe, std::string i inne dla których zdefiniowany operator<<(std::ostream, typ).

Troche doprecyzuj co dla ciebie znaczy "o co chodzi w deklaracji tablicy obiektów". Btw. tutaj masz tablice wskaźników.
komentarz 11 maja 2016 przez sebask08 Użytkownik (510 p.)
Przepraszam bardzo :D mało mam czasu na nauke dlatego mi sie to miesza wszystko :/ Chodzi o to że musze wyświelić metody każdej z klas tj nazwa, obowod, pole powierzchni. Jak to zrobić?
komentarz 11 maja 2016 przez sebask08 Użytkownik (510 p.)
Dlaczego nie moge tego po prostu tak wyświetlić?

cout<<tablica[1].Nazwa()<<endl;
komentarz 11 maja 2016 przez criss Mędrzec (172,570 p.)
Możesz, przecież Nazwa() zwraca stringa.
komentarz 11 maja 2016 przez criss Mędrzec (172,570 p.)

Tzn. prawie możesz. tablica to tablica wskaźników, więc musisz użyć operatora ->

tablica[1]->Nazwa()

 

komentarz 12 maja 2016 przez sebask08 Użytkownik (510 p.)
Dzięki tak własnie zrobiłem :D
0 głosów
odpowiedź 11 maja 2016 przez Prochnowy Obywatel (1,020 p.)
komentarz 11 maja 2016 przez sebask08 Użytkownik (510 p.)
Dzięki, ale tutaj nie ma nic o obiektówce ;/

Podobne pytania

0 głosów
1 odpowiedź 2,611 wizyt
pytanie zadane 8 września 2016 w Java przez nemezisso Użytkownik (860 p.)
0 głosów
2 odpowiedzi 934 wizyt
0 głosów
1 odpowiedź 1,424 wizyt

93,741 zapytań

142,676 odpowiedzi

323,294 komentarzy

63,319 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...