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

Tablica obiektów roślin - problem z kodem w C++

Object Storage Arubacloud
0 głosów
453 wizyt
pytanie zadane 14 czerwca 2018 w Rozwój zawodowy, nauka, praca przez fruczka Użytkownik (570 p.)

Cześć :)

Chciałbym się Was poradzić Moi Drodzy, w jaki sposób można wykonać tablicę obiektów różnych klas? Utworzyłem następujący kod:
 

#include <iostream>
#include <conio.h>

using namespace std;

class roslina
{
protected:
    string rodzaj;

private:
    string nowa;

public:
    string nazwa;
    string kontynent;
    int wiek;
    roslina_1();
    void wczytaj()
    {
        cout << "Dodawanie nowej rosliny!" << endl << endl;
        cout << "Podaj nazwe rosliny: ";
        cin >> nazwa;
        cout << "Podaj kontynent: ";
        cin >> kontynent;
        cout << "Ile dni zyje roslina: ";
        cin >> wiek;
        cout << "Jaki to jest rodzaj rosliny: ";
        cin >> rodzaj;
        cout << "Czy to nowa roslina: ";
        cin >> nowa;

        cout << endl;

    }

    void wypisz()
    {
        if(kontynent=="Europa") cout << "Jestem roslina zyjaca w Europie!" << endl << endl;
        else if (kontynent=="Azja") cout << "Jestem roslina zyjaca w Azji!" << endl << endl;
        else if (kontynent=="Ameryce") cout << "Jestem roslina zyjaca w Azji!" << endl << endl;
        else if (kontynent=="Australia") cout << "Jestem roslina zyjaca w Azji!" << endl << endl;
        else cout << "Gdzie ja zyje?! Skad ja jestem?!" << endl << endl;
    }
};

class roslina_miesozerna :public roslina
{
public:
        roslina_2();
        string jedzenie;
        string miesozernosc;
        int sen;

        void wczytaj()
        {
            cout << endl << "Mamy kilka dodatkowych pytan..." << endl;
            cout << "Ile ta roslina je: ";
            cin >> jedzenie;
            cout << "Czy to roslina miesozerna: ";
            cin >> miesozernosc;
            cout << "Ile ta roslina spi godzin: ";
            cin >> sen;
            cout << endl;
        }

        void wypisz()
        {
            if (sen<5 && sen>=0) cout << "Ta roslina prawie nie spi!" << endl;
            else cout << "Czy ta roslina w ogole zyje?" << endl;
        }
};

int main()
{
    roslina zwyczajna;
    zwyczajna.wczytaj();
    zwyczajna.wypisz();
    roslina_miesozerna jedzonko;
    jedzonko.wczytaj();
    jedzonko.wypisz();
    roslina_miesozerna *roslinka2 = new roslina_miesozerna;
    roslina *roslinka1 = static_cast <roslina*> (roslinka2);
    cout << endl << endl;
    cout << "Koniec!" << endl;
    getch();
    return 0;
}

Próbowałem również kombinować nieco pisząc:
 

nazwa tab[3];
kontynent tab[3];
wiek tab[3];
// i tak dalej...

Bardzo proszę o pomoc. Będę niesamowicie wdzięczny. :)


Pozdrawiam,
fruczka

2 odpowiedzi

0 głosów
odpowiedź 14 czerwca 2018 przez RafalS VIP (122,820 p.)
Zeob tsblice referencji lub wskaźnikow do wspólnej klasy bazowej wszystkich obiektow które chcesz w tej tablicy trzymać. Do takiej tablicy mozesz dodawac obiekty bez zadnego rzutowania.

Po wiecej informacji na ten temat : google polimorfizm C++
komentarz 14 czerwca 2018 przez fruczka Użytkownik (570 p.)
Hmm... poszperam troszkę :) Cóż... tak naprawdę jeszcze nie mieliśmy tego działu obiektówki - polimorfizm, a polecenia pewnie nie da się bez tego wykonać ;) Tak czy inaczej jak będę miał jeszcze jakieś pytanka to się tutaj odezwę :)
0 głosów
odpowiedź 14 czerwca 2018 przez Munvik Dyskutant (9,350 p.)
Polimorfizm to słowo klucz.
komentarz 14 czerwca 2018 przez fruczka Użytkownik (570 p.)

Utworzyłem coś następującego po zaznajomieniu się z polimorfizmem:
 

#include <iostream>
#include <string>
#include <conio.h>

using namespace std;

class roslina {
    string nazwa;
    int    wiek;
    public:
        roslina(const string& nazwa = "No Name", int wiek = 100)
        {
            this->nazwa = nazwa;
            this->wiek = wiek;
            cout << "konstrukcja " << this->nazwa << endl;
        }

           int getWiek() { return wiek; }

           string getNazwa() { return nazwa; }
       };

int main()
{
roslina ob("Storczyk");

roslina ktab[5] = { roslina("Slonecznik", 17),
roslina("Chwast"),
roslina("Paprotka", 26),
ob
};

    for (int i = 0; i < 5; i++)
    cout << ktab[i].getNazwa() << " lat "
    << ktab[i].getWiek()  << endl;
    getch();
    return 0;
}

Czy można to nazwać tablicą obiektów roślin o różnych klasach? Czy czegoś tutaj nadal brakuje? :)

Podobne pytania

0 głosów
1 odpowiedź 272 wizyt
pytanie zadane 9 listopada 2018 w C i C++ przez Daaa22 Dyskutant (8,250 p.)
0 głosów
2 odpowiedzi 1,256 wizyt
pytanie zadane 17 października 2018 w JavaScript przez smokolisz Mądrala (6,340 p.)
0 głosów
2 odpowiedzi 631 wizyt
pytanie zadane 11 maja 2016 w C i C++ przez sebask08 Użytkownik (510 p.)

92,556 zapytań

141,404 odpowiedzi

319,561 komentarzy

61,942 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!

...