具有默认参数的 C++ 结构,可选择在构造函数中更改

C++ Struct with default argument, optionally changeable in constructor

假设我有以下结构。

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

我想为它创建一个常规构造函数,这样我就可以指定每个成员。

尽管如此,我想默认将成员 "type" 设置为 "car",只需要在构造函数中指定 "type",在这种情况下并不常见车辆不会是 "car"。

首先,你没有说,但我感觉到一个小误会:struct 和 class 之间的区别只是约定。结构是 C++ 中的 classes。关键字 structclass 可用于声明 class,唯一的区别是默认访问(根据结构具有所有 public 的通用约定)。

顺便说一句,您可以简单地编写两个构造函数(我对字符串使用 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") {}
};

您还可以在 class 初始化程序中使用(它们随 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 class 初始值设定项,在第二个构造函数中使用 in class 初始值设定项。