C ++ Struct с аргументом по умолчанию, который можно изменить в конструкторе - PullRequest
0 голосов
/ 16 июня 2020

Допустим, у меня есть следующая структура.

struct vehicle
{
  int    price;                           
  char*  year;                           
  char*  type; 
}

Я хотел бы сделать для него обычный конструктор, который позволил бы мне указать каждый член.

Тем не менее, я хотел бы установить член «тип» как «автомобиль» по умолчанию, имея только указать «тип» в конструкторе, в тех редких случаях, когда транспортное средство не будет автомобиль".

1 Ответ

2 голосов
/ 16 июня 2020

Во-первых, вы этого не сказали, но я чувствую небольшое недоразумение: разница между структурой и классом - это просто соглашение. Структуры - это классы в C ++. Ключевые слова struct и class могут использоваться для объявления класса, и единственная разница - это доступ по умолчанию (в соответствии с общим соглашением, согласно которому все структуры имеют publi c).

Из-за этого вы можете просто написать два конструктора (я использую std::string для строк, потому что считаю c -строки чрезвычайно трудными для работы):

struct vehicle
{
  int price;                           
  std::string year;                           
  std::string type; 
  vehicle(int p, const std::string& y, const std::string& t) : price(p),year(y),type(t) {}
  vehicle(int p, const std::string& y) : price(p),year(y),type("car") {}
};

Вы также можете использовать в инициализаторе класса (они поставляются с C ++ 11):

struct vehicle
{
  int price;                           
  std::string year;                           
  std::string type{"car"}; 
  vehicle(int p, const std::string& y, const std::string& t) : price(p),year(y),type(t) {}
  vehicle(int p, const std::string& y) : price(p),year(y) {}
};

Список инициализаторов в конструкторе побеждает инициализатор класса in, а во втором конструкторе инициализатор класса используется.

...