提问者:小点点

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


假设我有以下结构。

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

我想为它做一个常规的构造函数,这将允许我指定每个成员。

然而,我想将成员“type”设置为默认的“car”,只需在构造函数中指定“type”,在车辆不是“car”的情况下,这种情况并不常见。


共1个答案

匿名用户

首先,你没有说出来,但我感觉到一个小误解:结构和类之间的区别只是约定。 结构是C++中的类。 关键字structclass可用于声明类,唯一的区别是默认访问(根据结构具有全部公共的公共约定)。

除此之外,您可以简单地编写两个构造函数(我对字符串使用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) {}
};

构造函数上的初始值设定项列表胜过类中的初始值设定项,在第二个构造函数中使用类中的初始值设定项。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(默认|参数|c++|结构|可在|构造|函数|中|选择|更改)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?