通过构造函数和公共方法传递参数

时间:2015-12-15 02:38:28

标签: c++ function oop constructor

我听到朋友们对参数传递的争论,何时通过构造函数传递输入以及何时通过公共方法?

首先,在构造函数中初始化公共方法的所有参数。对此的争论:如果函数的参数数量比玩具示例大很多,它看起来会更清晰。对此的争论:在某些用例中我只需要调用仅依赖于a1的func1,需要初始化a2创建不必要的耦合。没有立即清楚每个功能的输入依赖。

class A
{
 public:
  A(int a1, int a2) : m_a1(a1), m_a2(a2) {};
  func1(){ //do something with m_a1 };
  func2(){ //do something with m_a1, m_a2 };
 private:
  int m_a1;
  int m_a2;
};

第二种情况,没有在构造函数中初始化。对此的论证:立即明确函数所依赖的输入,并且没有不必要的耦合。对此的争论:这只是函数的集合,为什么首先使用类?如果代码中有更多的函数和参数,代码将被重复的类似参数混乱。

class A
{
 public:
  func1(int a1){ //do something with a1 };
  func2(int a1, int a2){ //do something with a1, a2 };
};

第三种情况,只有在构造函数中初始化的公共方法的常见参数。似乎是双方都做得最好,但双方也有不利之处。

class A
{
 public:
  A(int a1) : m_a1(a1) {};
  func1(){ //do something with m_a1 };
  func2(int m_a2){ //do something with m_a1, a2 };
 private:
  int m_a1;
};

另外一个问题是,如果课程仅限于一个公共方法,第一个方案或第二个方案被认为是更好的做法吗?

1 个答案:

答案 0 :(得分:0)

你的判断都没有真正的IMO。如果它是类所表示的对象的组成部分,则使其成为成员变量。假设你正在上课(CASE WHEN try_convert(float, LINE1_OPEN_LOOP_VOLTAGE) >= 0.0 OR try_convert(float, LINE2_OPEN_LOOP_VOLTAGE) >= 0.0 THEN 'YES' WHEN LINE1_OPEN_LOOP_VOLTAGE IS NULL OR LINE2_OPEN_LOOP_VOLTAGE IS NULL THEN 'NO' ELSE 'CHECK BUSINESS LOGIC' END) AS [REVERSE POLARITY ISSUE], 。然后,Carenginegearbox等将成为所有成员变量,即使您在{{1}中使用brakeengine }和gearbox中的SpeedUp()

因此,在您的情况下,如果brakeSlowDown()确实属于a1,那么将它们声明为成员变量绝对是一个不错的选择,而不是明确地传递给函数。 / p>

希望你明白我的意思。