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

Czy da się napisać program w którym user wywołuje nowe obiekty? (c++)

Object Storage Arubacloud
0 głosów
402 wizyt
pytanie zadane 25 października 2020 w C i C++ przez MONKNOW Użytkownik (720 p.)
Hej! Próbuje napisać taki program żeby user mógł utworzyć nowy obiekt, np. może to być apka sklepu gdzie admin dodaje nowy przedmiot do bazy przedmiotów(tablicy? vektora?), a każdy przedmiot jest obiektem klasy, której członkami są np. ID, cena, nazwa itp. Nie moge jednak wpaść na pomysł jak rozwiązać problem nazwy obiektu - czy da się to zrobić w pętli?
komentarz 25 października 2020 przez NewEraOfPeace Gaduła (4,790 p.)
To co w końcu chcesz zrobić? Bo łącznie naliczyłem trzy problemy - wywołanie obiektu (Callable?), tworzenie obiektu i dodanie go do jakiejś bazy, problem nazwy obiektów.
komentarz 25 października 2020 przez tkz Nałogowiec (42,000 p.)

@MONKNOW, Dziedziczenie. 

komentarz 25 października 2020 przez tangarr Mędrzec (154,860 p.)
Podczepiam się, bo też jestem ciekaw co autor pytania miał na myśli.
komentarz 26 października 2020 przez wizarddos Nałogowiec (25,930 p.)

@MONKNOW, a dasz jakiś swój kod? cokolwiek? może to pomoże rozwiązać problem

2 odpowiedzi

0 głosów
odpowiedź 26 października 2020 przez wizarddos Nałogowiec (25,930 p.)

czyli tak, potrzebujesz klasy  którą będziesz wywoływać wtedy gdy user tak sobie zażyczy. chodzi ci os coś tego rodzaju

#include <iostream>
using namespace std;
class produkt
{
private:
string name;
int cena;

public:
produkt(){}//w nawiasach definicja konstruktora
void dodaj(){/*tu mechanizmy dodawnia do bazy*/}
~produkt(){}
};
int main()
{
cout << "czy chcesz dodac produkt do bazy?" << endl;
string odp;
cin >> odp;
if(odp == "tak" || "Tak")
{
produkt p1;
p1.dodaj();
}
else
{
cout << "do widzenia" << endl;
}
}

ale przykład chyba lepiej by było zrobić w np. JS 

komentarz 26 października 2020 przez MONKNOW Użytkownik (720 p.)
A czy wtedy nie będzie tak, że każdy nowy dodany obiekt będzie mieć ten sam ObjectName? tutaj p1
komentarz 26 października 2020 przez wizarddos Nałogowiec (25,930 p.)
no tak, możesz np użyc konkatenacji i łączyć łańcuch z cyfrą (o ile to możliwe)
0 głosów
odpowiedź 26 października 2020 przez MONKNOW Użytkownik (720 p.)

Przepraszam wszystkich, jestem nwbie bardzo i nieprecyzyjnie określiłem swój problem. Chciałbym stworzyć tablice lub wektor (nie wiem co jest bardziej odpowiednie dla takiego programu) wypełniony obiektami jednej klasy, do której user przez input mógłby dodać kolejne obiekty. Przy okazji jeśli obiekt ma string nazwa, int ilość, int waga itp. to przy wywoływaniu nowego obiektu user może określić jaką nazwe, wagę itp. obiekt ma posiadać. Jeśli chodzi o kodzie to myślałem o czymś takim;

obiekt lista_obiektow[30]
int licznik = 0;

class obiekt {
public:
int cena;
string nazwa;
};

void nowy_obiekt(){

cout << nazwij nowy obiekt << endl;
cin >> lista_obiektow[licznik].nazwa;
cout <<jaka jest cena obiektu?
cin >> lista_obiektow[licznik].cena;
licznik ++;
}


Niestety taki kod nie pozwala userowi na stworzenie nowego obiektu, a jedynie pozwala na operacje na memberach stworzonych juz obiektów. Szkoda wtedy pamięci, a w powyższym kodzie po 30 dodanym obiekcie nie ma już w tablicy miejsca na kolejne. Stąd moje zapytanie czy jest możliwe aby user przez cin mógł utworzyć nowy obiekt i dodać go do tablicy? A jeśli nie to czy są jakieś inne sposoby na rozwiązanie mojego problemu?

1
komentarz 26 października 2020 przez Whiskey_Taster Pasjonat (15,610 p.)
Tak jak myślałem. Zapoznaj się z przydziałem dynamicznym pamięci oraz operatorem new. Dzięki temu będziesz mógł tworzyć obiekty klas w trakcie działania programu.
1
komentarz 26 października 2020 przez tkz Nałogowiec (42,000 p.)

@MONKNOW,

#include <iostream>
#include <string>
#include <vector>

class Obiekt{
    double cena;
    std::string nazwaObiektu;
    public:
    explicit Obiekt(double _cena, const std::string& _nazwaObiektu): cena{_cena}, 
                                                                     nazwaObiektu{_nazwaObiektu} {}
    void wyswietlObiekt() const
    {
        std::cout<<"cena: "<<cena<<' '<<"nazwa obiektu: "<<nazwaObiektu<<'\n';
    }
};

int main()
{
    std::vector<Obiekt> zbiorObiektow;
    double cena;
    std::cin>>cena;
    std::string nazwaObiektu;
    std::cin>>nazwaObiektu;
    zbiorObiektow.emplace_back(cena, nazwaObiektu);
    for(const auto&obiekt : zbiorObiektow)
    {
        obiekt.wyswietlObiekt();
    }
}

Tak jak myślałem. Zapoznaj się z przydziałem dynamicznym pamięci oraz operatorem new. Dzięki temu będziesz mógł tworzyć obiekty klas w trakcie działania programu.

Obecnie jest to najgorszy możliwy wybór. 

komentarz 26 października 2020 przez MONKNOW Użytkownik (720 p.)
co oznaczają underscores przed nazwą zmiennych w Twoim kodzie? np. _cena
1
komentarz 26 października 2020 przez tkz Nałogowiec (42,000 p.)
Nic, to nazwa. W ten sposób oznaczam argumenty, które się dublują nazwami.

Podobne pytania

+1 głos
2 odpowiedzi 588 wizyt
0 głosów
1 odpowiedź 119 wizyt
pytanie zadane 26 września 2023 w Systemy operacyjne, programy przez Tymoteusz_ Nowicjusz (240 p.)
0 głosów
0 odpowiedzi 619 wizyt

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

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

...