我听到朋友们对参数传递的争论,何时通过构造函数传递输入以及何时通过公共方法?
首先,在构造函数中初始化公共方法的所有参数。对此的争论:如果函数的参数数量比玩具示例大很多,它看起来会更清晰。对此的争论:在某些用例中我只需要调用仅依赖于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;
};
另外一个问题是,如果课程仅限于一个公共方法,第一个方案或第二个方案被认为是更好的做法吗?
答案 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],
。然后,Car
,engine
,gearbox
等将成为所有成员变量,即使您在{{1}中使用brake
和engine
}和gearbox
中的SpeedUp()
。
因此,在您的情况下,如果brake
和SlowDown()
确实属于a1
,那么将它们声明为成员变量绝对是一个不错的选择,而不是明确地传递给函数。 / p>
希望你明白我的意思。