簡體   English   中英

在構造函數上傳遞參數或在每個方法上傳遞它們

[英]Pass parameter on constructor or pass them on each method

我正在學習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上傳遞const ros::Publisher& publisher, ros::Rate& loop_rate一次是否更好,或者每次調用其他方法時都傳遞它們。

在構造函數中傳遞這兩個參數並在類中存儲指針或在每個方法上傳遞它們更好嗎?

順便說一句,這兩個參數將始終是相同的對象。

順便說一句,這兩個參數將始終是相同的對象。

對我來說,這表明他們應該是班級的成員變量。 使它們成為該類的成員變量遵循不要重復自己(DRY)原則 因此,在構造函數中傳遞它們並讓對象將它們存儲為成員變量是有意義的。

我會說,從編程的角度來看,你不必一次又一次地復制和粘貼相同的代碼就越少。 這就是編程讓計算機為你重復的事情。 我會將這些參數傳遞給構造函數,然后將它們存儲為屬性。 我相信你會像下面這樣實現它:

class RobotMove
{
private:
    double current_linear;
    double current_angular;
    const ros::Publisher * publisher;
    ros::Rate * loop_rate;

public:
    RobotMove(const ros::Publisher& publisher, ros::Rate& loop_rate)
    {
        this->publisher = &publisher;
        this->loop_rate = &loop_rate;
    }
};

這是一個很好的基本問題。

要回答這個問題,您可以問自己are these parameters specific to each action(method) or are they objects used by an instance of the class in general ?

在您的示例中給出了類和您的方法的名稱,這么多方法使用它們並且您另外指定它們不會更改的事實,我建議將它們傳遞給構造函數而不是每次調用。

這並不總是正確的答案,你必須根據你認為這些參數可能改變的頻率來判斷和平衡,還要根據你想要給你的類及其與這些參數的關系的語義來判斷和平衡。

我知道這聽起來像很多絨毛,但通常設計選擇取決於上下文。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM