2012-11-26 30 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