Konstruktor bezparametrowy i wieloparametrowy z listą inicjalizującą

0

Mam problem ze zrozumieniem zasad rządzących konstruktorami.
Początkowo wydawało mi się, że konstruktor bezparametrowy będzie wyglądał zwyczajnie tak

class Auto
{
public: 
             Auto
          {
            // konstruktor bezparametrowy
          }
};

a konstruktor z parametrami

class Auto
{
public: 
             Auto (int przebieg, int nr_koloru_lak, string marka)
          {
            int przebieg;
            int nr_koloru_lak;
           string marka;
          }
};

Teraz jednak mam polecenie użycia listy inicjalizacyjnej w konstruktorze bezparametrowym.

Czy będzie to wtedy wyglądało w taki sposób?

class Auto
{
public: 
             Auto :przebieg(0),nr_koloru_lak(0),marka(" ")
          {
            
          }
};

A dla tego z parametrami

class Auto
{
public: 
             Auto(int przebieg, int nr_koloru_lak, string marka) :przebieg(200000),nr_koloru_lak(135),marka(X)
          {
            
          }
};

Proszę o takie jak najbardziej prostolinijne wyjaśnienie różnic bo niestety żadne ze źródeł nie wyjaśniło mi tego problemu w pełni

1

C++ ma kilka możliwości (każda robi to samo):

class A
{
   // brak definicji konstruktorów, domyślny jest auto generowany
    ...
private:
    int a = 3; // default member initializer
    std::string name = "hello";
};

class B
{
public:
   B() {} // use default member initializer
    ...
private:
    int a = 3; // default member initializer
    std::string name = "hello";
};

class C
{
public:
   C()
       : a{ 3 } // lista inicjalizacyjna 
       , name { "hello" }
   {} 
    ...
private:
    int a;
    std::string name;
};

class D
{
public:
   D() : D(3, "hello" ) {} // delegacja

   D(int x, std::string n)
       : a{ x }  // lista inicjalizacyjna 
       , name {std::move(n) }
   {} 
    ...
private:
    int a;
    std::string name;
};
0

A gdyby to użytkownik miał podawać parametry?

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