我聽到朋友們關於參數傳遞,何時通過構造函數傳遞輸入以及何時通過公共方法的衝突?通過構造函數傳遞參數vs公共方法
第一種情況,公共方法的所有參數在構造函數中初始化。對此的爭論:如果函數的參數數量比玩具例子大很多,它將看起來更清晰。對此的論點:在某些使用情況下,我只需要調用僅依賴於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'完全是做什麼的? – user657267