Kontruktor i lista inicjalizacyjna a wywołanie funkcji z klasy `zrob()` przed inicjowaniem klasy.

0

Na lekcji nauczycielka dała zadania. Stworzyć klase z 2 funkcjami zrob i pokaz oraz konstruktor z listą inicjalizacją, co według mnie jest głupotą, bo lista nie jest potrzebna... i funkcja zrób ma wczytywać dane a pokaz ma pokazywać. I jest problem, inicjując klase inicjuje jednocześnie konstruktor który nie ma żadnych danych które mógłby uzupełnić bo funkcje zrób wywołam dopiero później. I moje pytanie brzmi, jak to zrobić by było dobrze? Nadziergałem coś takiego, lecz gdy wrzuce funckje zrób do klasy to oczywiście program się nie uruchomi:

#include<iostream>
using namespace std;
class Samochod
{
    private:
    string model;
    string marka;
    int pojemnosc;
    int masa;
public:
    void pokaz();
    Samochod(string m, string ma, int p, int mas):model(m),marka(ma),pojemnosc(p),masa(mas){};
};
void zrob(string &a, string &b, int &c, int &d)
{
    cin>>a>>b>>c>>d;
};
void Samochod::pokaz()
{
    cout<<model<<" "<<marka<<" "<<pojemnosc<<" "<<masa<<endl;
}
int main()
{
    string a,b;
    int c,d;
    zrob(a,b,c,d);
    Samochod z(a,b,c,d);
    z.pokaz();
} 

@furious programming specjalnie dla ciebie, wysiliłem się aby nazwać dobrze ten temat. Doceń to :D

0

To niech konstruktor ma domyślne parametry.

0

I po funkcji zrób mam wywołać jeszcze raz konstruktor?

    Samochod z(a,b,c,d);
    z.zrob(a,b,c,d);
    z.Samochod();
    z.pokaz();

bo jak tak robie to dostaje errora error: invalid use of 'Samochod::Samochod'

1

Nie można wywołać konstruktora na istniejącym obiekcie.

#include <iostream>
#include <string>
using namespace std;

class Samochod
{
public:
    Samochod(const string& model="", const string& marka="", int pojemnosc=0, int masa=0);
    
    void pokaz();
    void zrob();
private:
    string model;
    string marka;
    int pojemnosc;
    int masa;
};

Samochod::Samochod(const string& model, const string& marka, int pojemnosc, int masa)
	: model(model)
	, marka(marka)
	, pojemnosc(pojemnosc)
	, masa(masa)
{}

void Samochod::zrob()
{
    cin >> model >> marka >> pojemnosc >> masa;
}

void Samochod::pokaz()
{
    cout << model << " " << marka << " " << pojemnosc << " " << masa << endl;
}

int main()
{
    Samochod z;
    z.zrob();
    z.pokaz();
} 
0

No cóż, niech już tak będzie. Dzięki za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1