带有默认参数的C ++结构,可以在构造函数中随意更改

问题描述 投票:0回答:1

假设我具有以下结构。

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

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

尽管如此,在不太常见的情况下,当车辆不是“汽车”时,我默认将成员“类型”设置为“汽车”,而只需在构造函数中指定“类型” 。

c++ struct constructor optional-parameters default-arguments
1个回答
2
投票

首先,您没有说出来,但是我感觉到一个小的误解:结构和类之间的区别只是约定。结构是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) {}
};

构造函数上的初始化程序列表胜过in类初始化程序,在第二个构造函数中使用in类初始化程序。

© www.soinside.com 2019 - 2024. All rights reserved.