C++ 带有默认参数的结构,可选择在构造函数中更改
C++ Struct with default argument, optionally changeable in constructor
假设我有以下结构。
struct vehicle
{
int price;
char* year;
char* type;
}
我想为它创建一个常规构造函数,这将允许我指定每个成员。
尽管如此,我想将成员"type"设置为默认为"car",只需要在构造函数中指定"类型",在车辆不是"汽车"的情况下。
首先,你没有说出来,但我感觉到一个小误解:结构体和类之间的区别只是约定俗成。结构是C++中的类。关键字struct
和class
可用于声明类,唯一的区别是默认访问(根据结构具有所有公共的通用约定(。
这样一来,您可以简单地编写两个构造函数(我对字符串使用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 类初始值设定项。
相关文章:
- 选择要调用的构造函数
- 仅包含可移动 std::map 的类的移动构造函数不起作用
- C++ 带有默认参数的结构,可选择在构造函数中更改
- 当有右值构造函数可用时,为什么从右值调用类引用构造函数重载?
- 当类型适当的构造函数可用时,为什么一个编译器尝试使用已删除的副本构造函数
- 如果普通默认构造函数不执行任何操作,为什么我们不能使用 malloc 创建平凡可构造的对象?
- 将可调用对象传递给采用 std::function 的构造函数
- 如何根据 C++ 中的 cv 限定符选择构造函数
- C++:如何根据条件选择构造函数
- 编写有条件可选构造函数的最佳方式
- 带initializer_list的可选构造函数
- 可以抛出未初始化的 std::可选或 boost::可选构造函数
- 如何选择构造函数模板
- 根据构造函数的可访问性在函数之间进行选择的模板方法
- 在模板参数中通过SFINAE选择构造函数
- c++中的可视构造函数和析构函数
- 为不可复制对象选择构造函数
- 如何在C++11中使用SFINAE从多个选项中选择构造函数
- C++11:委托构造函数 - 无法选择构造函数模板?
- 如何使用 sfinae 选择构造函数