2012-11-26 37 views
0

我有一個簡單的問題,因爲我不正確地理解功能。 有這樣的代碼:在C++基礎的東西編程

int function(a, b) 
{ 
return a*b; 
} 

顯然對我來說,如果a和b是整數,那麼它返回結果。 然而具有這樣的:

int function1(arg1, arg2) 
{ 
//something 
if (B) 
{ 
    //do something 
    return; 
    } 
arg1[0] = variable1; 
arg1[1] = variable2; 
arg2 = variable3; 
return; 
} 

欲命名接口,因此輸入和輸出,並把該函數體進入「黑盒」。輸入是那些函數的參數,我是否正確?然後輸出是整數陣列arg1和整數arg2,是嗎?如果是這樣,輸入如何輸出,或者如果我錯了如何識別它? 另外,如果B在返回點是正確的,會發生什麼情況? 函數1什麼都不返回?如果是這樣,爲什麼不是void類型? 抱歉有點混亂和這樣有趣的例子,但多虧了我才能夠理解這個概念。

+4

尚不清楚你想要說什麼。什麼是黑匣子? –

+1

你的函數參數沒有類型。這是僞代碼嗎? – Cameron

+0

我覺得他是困惑在C/C++的習慣用語,一些投入被修改,因此也是「產出」與一個單一的輸出返回類型的事情 –

回答

3

這段代碼實際上是無效的C++:

int function(a, b) 
{ 
return a*b; 
} 

它是無效的,因爲函數參數類型必須和ab沒有指定的類型。這將是有效的:

int function(int a, int b) 
{ 
return a*b; 
} 

如果你想設計一個可以接受不特定類型的參數的函數,你可以使用模板爲:

template<class Val> Val function(Val a, Val b) 
{ 
    return a*b; 
} 

這適用於任何類型的工作(如int),只要該類型在與operator*一起使用時與a*b一起使用時有意義。例如,std::string將不起作用。

在C++中,聲明爲返回類型的所有函數都必須在每個返回點都返回該類型。這使得該代碼也無效:

int function1(arg1, arg2) 
{ 
//something 
if (B) 
{ 
    //do something 
    return; 
    } 
arg1[0] = variable1; 
arg1[1] = variable2; 
arg2 = variable3; 
return; 
} 

不能從聲明爲返回一個int一個函數返回void。如果你需要從被聲明爲返回的東西功能「越獄」,你可以拋出一個異常:

int function1(arg1, arg2) 
{ 
//something 
if (B) 
{ 
    //do something 
    throw std::runtime_error("whoops"); 
    } 
arg1[0] = variable1; 
arg1[1] = variable2; 
arg2 = variable3; 
throw std::runtime_error("whoops 2"); 
} 

然而,鑑於這個問題我懷疑這是不是你要找的上下文因爲,你現在應該把例外視爲高級話題。這些不是你正在尋找的機器人。

+0

我有一些C++的知識,就我而言,我知道模板的用法。我現在對輸入輸出有點困惑,當我有如此多的回報時,有些嵌套在if條件下。你能告訴我在這種情況下如何把** try **和** catch **作爲異常的一部分嗎?如果我做對了,在全滿B條件下who is被拋出,並且它跳出函數1 ...放置在哪裏,或者嘗試是什麼? – berndh

+1

我真的**不認爲例外是這裏工作的正確工具,因爲我瞭解你要完成的任務。然而,要回答你的問題,你需要圍繞'try'塊中的'function'調用,並且立即用一系列'catch'塊來跟蹤它。再次,我真的懷疑這是你需要的。 –

0

如果B爲真,則函數返回填充輸出數組之前,但你仍然需要返回東西因爲函數有一個「INT」返回類型。

至於參數是輸入參數還是輸出參數,這取決於您。然而,在C++中的約定是,輸入參數是常量(如果他們是指針或引用),和非const如果他們輸出paramenters:

int function1(const int* arg1, int* arg2) // arg1 is an in param, arg2 is an out param 
+0

謝謝!我可以肯定,在這種情況下,閱讀function1參數我可以建立我的輸入和輸出接口?因爲我認爲一個函數也可以修改一些全局變量,這不在參數之中。是這樣嗎? – berndh