Mam takie pytanie do bardziej doświadczonych. Mam kod programu C++, który zbudowany jest z jednej klasy Auta. Kod programu wygląda tak:
#include <iostream>
using namespace std;
//od tego miejsca prototyp klasy
class Auta
{
private:
std::string marka_;
std::string model_;
int rok_produkcji_;
float pojemnosc_silnika_;
int ilosc_koni_mechanicznych_;
int cena_netto_;
int cena_brutto_;
void obliczenie_ceny_brutto()
{
cena_brutto_ = cena_netto_ * 1.22;
}
public:
Auta(); //prototyp konstruktora domyślnego
Auta(std::string marka, std::string model, int rok, float poj, int konie, int netto);
~Auta();
void get_car();
void show();
};
//od tego miejsca funkcja glowna main
int main()
{
{
Auta auto1;
auto1.get_car();
auto1.show();
}
{
Auta car1("fiat", "126p", 1985, 0.65, 24, 200);
car1.show();
}
return 0;
}
//od tego miejsca definicje funkcji, konstruktorów, destruktora
Auta::Auta()
{
marka_ = "bez nazwy";
model_ = "bez nazwy";
rok_produkcji_ = 0;
pojemnosc_silnika_ = 0.0;
ilosc_koni_mechanicznych_ = 0;
cena_netto_ = 0;
}
Auta::Auta(std::string marka, std::string model, int rok, float poj, int konie, int netto)
{
marka_ = marka;
model_ = model;
rok_produkcji_ = rok;
pojemnosc_silnika_ = poj;
ilosc_koni_mechanicznych_ = konie;
cena_netto_ = netto;
obliczenie_ceny_brutto();
}
Auta::~Auta()
{
}
void Auta::get_car()
{
cout << "Podaj marke samochodu, jaki chcesz kupic: ";
cin >> marka_;
cout << "Podaj model samochodu: ";
cin >> model_;
cout << "Podaj rok produkcji: ";
cin >> rok_produkcji_;
cout << "Podaj pojemnosc silnika: ";
cin >> pojemnosc_silnika_;
cout << "Podaj ilosc koni mechanicznych: ";
cin >> ilosc_koni_mechanicznych_;
cout << "Podaj cene tego auta: ";
cin >> cena_netto_;
}
void Auta::show()
{
cout << endl;
cout << "Marka auta: " << marka_ << endl;
cout << "Model auta: " << model_ << endl;
cout << "Rok produkcji: " << rok_produkcji_ << endl;
cout << "Pojemnosc silnika: " << pojemnosc_silnika_ << endl;
cout << "Ilosc koni mechanicznych: " << ilosc_koni_mechanicznych_ << endl;
cout << "Cena netto: " << cena_netto_ << "zl" << endl;
obliczenie_ceny_brutto();
cout << "Cena brutto: " << cena_brutto_ << "zl" << endl;
cout << endl;
}
I teraz moje pytanie z tym związane. Jaka jest różnica między tworzeniem obiektów i operowaniem nimi jednym sposobem za pomocą:
Auta auto1;
auto1.get_car();
auto1.show();
A drugim sposobem za pomocą konstruktora:
Auta car1("fiat", "126p", 1985, 0.65, 24, 200);
car1.show();
Jedną zasadniczą różnicę widzę sam. Jest nią to, że w przypadku pierwszym to użytkownik podaje odpowiednie wartości do zmiennych takie jak model auta, jego rok produkcji itd. A w drugim przypadku to my sami pisząc program od razu narzucamy wszystkie parametry za pomocą konstruktora. Potem możemy użyć destruktora tak jak się to dzieje w programie (bo po wyjściu z bloku destruktor automatycznie działa), aby wyczyścić ten obiekt z pamięci. Czyli mamy kolejną różnicę. Czyścimy pamięć w ten sposób i pozbywamy się tego obiektu. Może to być przydatne w jakiś grach. Ale czy można usunąć taki obiekt korzystając z pierwszego sposobu, gdzie to użytkownik podaje dane samochodu? Jest może jakaś funkcja delete, która nam to obsłuży? I jakie są inne różnice w tych dwóch sposobach operowaniem nad obiektami?