具有默认参数的 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。关键字 struct
和 class
可用于声明 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 初始值设定项。
假设我有以下结构。
struct vehicle
{
int price;
char* year;
char* type;
}
我想为它创建一个常规构造函数,这样我就可以指定每个成员。
尽管如此,我想默认将成员 "type" 设置为 "car",只需要在构造函数中指定 "type",在这种情况下并不常见车辆不会是 "car"。
首先,你没有说,但我感觉到一个小误会:struct 和 class 之间的区别只是约定。结构是 C++ 中的 classes。关键字 struct
和 class
可用于声明 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 初始值设定项。