2012-11-26 3 views
0

나는 기능을 제대로 이해하지 못하기 때문에 간단한 질문이 있습니다. 같은 코드를 갖는C++ 기본 프로그래밍에서

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

은 a와 b가 INT 경우 다음이 결과를 반환 나를 위해 분명하다.

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

내가 인터페이스 이름을 지정할 때문에 입력 및 출력하고, "블랙 박스"로 함수 본문 입력 : 그러나 이러한 구비. 입력은 함수의 인수 인 것입니다. 맞습니까? 그러면 출력은 정수 배열 arg1이고 정수는 arg2입니다. 맞습니까? 그렇다면 입력을 어떻게 출력 할 수 있습니까? 아니면 입력을 식별하는 방법이 잘못 되었습니까? 또한 B이 사실이라면 어떻게됩니까? function1이 반환합니까? 그렇다면 왜 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) a*b과 같이 operator*과 같이 사용하면 해당 유형이 적합합니다. 예를 들어 std::string은 작동하지 않습니다.

C++에서 형식을 반환하도록 선언 된 모든 함수는 모든 반환 지점에서 해당 형식을 반환해야합니다. 당신은 int을 반환 선언 된 함수에서 void를 반환 할 수

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

: 그 또한 무효이 코드를합니다. 나는 이것이 당신이 찾고있는 하지 의심이 질문의 맥락 주어진, 그러나

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++ 지식이있다. 예를 들어 템플릿 사용법을 알고있다. 저는 이제 약간의 입력 결과와 혼동을 느낍니다. 많은 수익을 올리면, 조건에 중첩되는 경우가 있습니다. 이런 경우에 ** ** ** ** ** catch ** 예외의 일부를 넣는 법을 말해 줄 수 있습니까? 내가 제대로 얻으면, B가 가득 채워진 상태에서 웁살이가 던져져 기능이 없어져서 잡아 먹는 곳을 찾거나 시도해 보지 않겠습니까? – berndh

+1

나는 ** 당신이 성취하고자하는 것에 대한 나의 이해를 바탕으로 예외가 여기에 적합한 도구라고 생각하지 않습니다. 그러나 질문에 대답하기 위해'try' 블록에서'function'에 대한 호출을 둘러싸고'catch' 블록과 함께 바로 따라갑니다. 다시 말하지만, 나는 이것이 당신이 필요로하는 것이라고 정말로 의심합니다. –

0

B가 true이면 출력 배열이 채우기 전에 함수가 반환되지만 함수에 "int"반환 유형이 있기 때문에 무언가 인을 반환해야합니다.

매개 변수가 입력 매개 변수인지 출력 매개 변수인지는 사용자가 결정합니다.그러나 C++의 관습은 입력 매개 변수가 const (포인터 또는 참조 인 경우)이고 출력 매개 변수가 paramer 인 경우 const가 아닌 것입니다.

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

감사합니다! 이런 경우에 function1 인수를 읽으면 입력 및 출력 인터페이스를 구축 할 수 있습니까? 왜냐하면 함수는 인수가 아닌 일부 전역 변수를 수정할 수도 있기 때문입니다. 그럴까요? – berndh

관련 문제