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

Tablica obiektów C++ problem

Object Storage Arubacloud
0 głosów
633 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,590 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,590 p.)
Możesz, przecież Nazwa() zwraca stringa.
komentarz 11 maja 2016 przez criss Mędrzec (172,590 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,134 wizyt
pytanie zadane 8 września 2016 w Java przez nemezisso Użytkownik (860 p.)
0 głosów
2 odpowiedzi 458 wizyt
0 głosów
1 odpowiedź 635 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...