【发布时间】:2016-03-20 17:04:29
【问题描述】:
我从朋友那里听到关于参数传递、何时通过构造函数传递输入以及何时通过公共方法传递的争论?
第一种情况,在构造函数中初始化公共方法的所有参数。对此的论证:如果函数的参数数量比玩具示例大很多,它看起来会更干净。反对这一点:在某些用例中,我只需要调用仅依赖于 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;
};
另一个问题是,如果该类被限制为只有一个公共方法,那么第一种情况还是第二种情况被认为是更好的做法?
【问题讨论】:
-
如果您的参数成为私有成员是有效的,我看不出如何将其设为函数参数不会破坏程序。
-
在我看来,
A本来就没有作为一个班级的事,A到底是做什么的?
标签: c++ function oop constructor