避免对自定义类使用初始化程序列表
Avoid using initialiser list for custom classes
我已经尝试在谷歌上搜索了很长时间,但没有成功,所以我真的很感谢你的帮助!
我使用一个自定义类作为私有变量:
private:
Location SWCorner;
Location NECorner;
在包含Location对象的类的构造函数中,我必须在initializer列表中给它一个值:
Territory::Territory(Location InitialPosition) : NECorner(InitialPosition), SWCorner(InitialPosition) {
this->NECorner = Location(InitialPosition.getX() + 1, InitialPosition.getY() + 1);
this->SWCorner = Location(InitialPosition.getX() - 1, InitialPosition.getY() - 1);
}
正如你所看到的,我正在做的是将它初始化为某个值,然后立即重新分配该值。这在我看来很难看。我真的很想做:
Territory::Territory(Location InitialPosition) {
this->NECorner = Location(InitialPosition.getX() + 1, InitialPosition.getY() + 1);
this->SWCorner = Location(InitialPosition.getX() - 1, InitialPosition.getY() - 1);
}
但这会引发一个错误(Location()没有匹配的函数调用)。
我想有两种解决方案:
- 我的不雅
- 为Location()指定默认构造函数
然而,我也不太喜欢第二个,因为我真的不想想出一个"默认位置"。
我想我想问的是:还有第三种我不知道的解决方案吗?我是不是忽略了什么?
谢谢,祝你一切顺利!
替换此:
Territory::Territory(Location InitialPosition) : NECorner(InitialPosition), SWCorner(InitialPosition) {
this->NECorner = Location(InitialPosition.getX() + 1, InitialPosition.getY() + 1);
this->SWCorner = Location(InitialPosition.getX() - 1, InitialPosition.getY() - 1);
}
这个:
Territory::Territory( Location const& initialPosition)
: NECorner( InitialPosition.getX() + 1, , InitialPosition.getY() + 1)
, SWCorner( InitialPosition.getX() - 1, InitialPosition.getY() - 1 )
{}
关于风格:
如果您控制类Location
的源代码,我建议您也删除类似Java的get
前缀,这些前缀只是C++中的视觉噪声。例如,想想getSin
。如果一个标准库函数被命名为getSin
,您会非常惊讶。
此外,我建议对类型和实例使用不同的命名约定。
最后,使用this->
前缀是非常不习惯的。备选方案包括成员变量的my
或m
前缀,或在Boost库代码中使用的_
后缀。
如下所示:
Territory::Territory(Location InitialPosition) :
NECorner(InitialPosition.getX() + 1, InitialPosition.getY() + 1),
SWCorner(InitialPosition.getX() - 1, InitialPosition.getY() - 1) {
}
相关文章:
- 指定的初始化程序
- 错误:为函数__THROW__asm提供了初始化程序
- C++引物动态数组初始化程序的数目超过大小
- 在C++初始化程序列表中使用Integer Literals
- 当指定初始化程序的顺序和字段声明不一致时,clang可以删除函数调用
- 模板非静态数据成员初始化程序何时实例化
- C++-数组的初始化程序太多
- 类的头文件中的C++初始化程序列表
- std::array不再发生初始化程序语法错误
- C++初始化程序上的Cortex M4硬故障
- 初始化程序列表
- 添加大数字C++-初始化程序失败
- 避免对自定义类使用初始化程序列表
- rvalue作为初始化程序来构造对象
- 数组的初始化程序太多错误
- 自定义矢量类模板初始化程序失败
- 初始化程序列表和赋值重载(运算符=)
- 引用包装的初始化程序列表
- 结构:初始化程序出错
- c++初始化程序列表