【发布时间】:2019-11-27 17:00:00
【问题描述】:
我正在学习 C++,我有这个头文件:
#ifndef _ROBOT_MOVE_H__
#define _ROBOT_MOVE_H__ 1
#include "ros/ros.h"
class RobotMove
{
private:
double current_linear;
double current_angular;
public:
void TurnLeft(const ros::Publisher& publisher, ros::Rate& loop_rate);
void TurnRight(const ros::Publisher& publisher, ros::Rate& loop_rate);
void TurnAround(const ros::Publisher& publisher, ros::Rate& loop_rate);
void Forward(const ros::Publisher& publisher, ros::Rate& loop_rate);
void Backward(const ros::Publisher& publisher, ros::Rate& loop_rate);
void Stop();
RobotMove();
~RobotMove();
}
#endif
我不知道最好在构造函数上传递一次const ros::Publisher& publisher, ros::Rate& loop_rate,还是每次调用其他方法时传递它们。
在构造函数中传递这两个参数并在类中存储一个指针更好还是在每个方法上传递它们?
顺便说一下,这两个参数总是相同的对象。
【问题讨论】:
-
#define _ROBOT_MOVE_H__这是一个保留的标识符。通过定义它,程序将具有未定义的行为。 -
这取决于很多事情。
-
另外,这很有可能得到纯属固执己见的答案。
-
构造函数的工作是创建一个函数对象并建立/满足类不变量。如果需要传递参数来做到这一点,它应该是一个构造函数参数。如果它不是必需的并且对象可以在没有的情况下使用,那么它可以稍后传递给函数。
-
#ifndef _ROBOT_MOVE_H__- 这是一个非常糟糕的标题守卫名称。它符合语言的两条规则: 1) 任何以下划线开头后跟大写字母的名称都保留用于实现。 2) 任何包含双下划线 anywhere 的名称都保留用于实现。您不允许在您自己的代码中使用此类名称,这样做会导致您的代码具有未定义的行为并且整个程序基本上是无效的。
标签: c++ design-patterns software-design