티스토리 뷰

제가 공부하기 위해서 블로깅 하는 것이므로-_-;;전혀 도움안되는 내용을 가지고 있습니다 ㅠ
-------------------------------------------------------------------------------------
c++ 입력 및 출력

cout , cin, endl
printf , scanf, \n

두개가 같은 뜻으로 사용됨

c++은 함수 오버로딩이 가능한데 오버로딩이란 같은이름의 함수지정이 가능 하다는 것이다.

void function(void){
}
void function(int i){
i=0;
}

c에서는 불가능햇지만 c++에서는 매개변수의 수에 따라 같은 함수 지정이 가능하다.
이유는 컴파일시에 매개변수의 차이까지 정보로 가지고 있기때문에 아예 다른 함수로 인식한다.

매개변수의 경우 void function(int 1=0){
} 이라고 했을 경우 매개변수가 들어오지 않으면 0으로 초기화 시킨다.

c의 #define 매크로의 경우도 다른 개념을 배웠다.
inline이라는 함수 인데 이 함수자체가 디파인과 같은 기능을 지닌다고한다.
하지만 인라인의 경우 함수를 매크로처럼 지정할수 있어서 c에서 매크로로 코딩하기 어려웠던 것을
아주 편하게 함수처럼 지정할수있다.

오버로딩에서 문제점은 같은 함수의 이름을 지정시에

function()이란 함수를 호출했다고하자

void function(void){
}
void function(int i=0){
i=0;
}

자 그럼 위에 두함수는 어떻게 되겠는가?
분명 둘다 호출이 될것이다. 아무것도 매개변수로 전달되지 않았다면
처음 매개변수가 보이드인 놈도 호출될것이고 전달안됐을때 0을 매개변수 초기화하라는 놈도
실행될 것이다 이 문제를 해결하기 위해서 등장한 것이 이름공간이란다.

공간에 이름을 지정한다.

namespace A{
void function(void){
}
}

namespace이놈이 바로 공간을 지정하는 놈인데 그뒤에 따라오는 변수가 그 공간 이름이 된다.
A라는 이름공간을 마련한 셈이다 그안에 fucntion이라는 함수가 들어있다
그럼 이놈을 출력할때에는 A::function(); 요런식으로 실행해준다
에이란 이름공간안에 펀션이라는 함수를 실행하라 이뜻이다.

네임스페이스가 확실히 편리하고 도움이 되지만 그 호출할때 이름이 길어지기때문에
조금 불편할수도 있다 그래서 이것을 해결하기 위해 사용하는 것이 using이다.

using A::fucntion(); 으로 선언하면
fucntion으로 바로 호출이 가능하다.

using A::function;

int main(void)
{
 function();
 return 0;
}

간단하게 이런식인데 이름공간안에있는 함수를 쉽게 불러오기 위함이다.

헷갈리는 것은 굳이 이름공간으로 두함수를 주었다고 하자...

그것을 편하게 불러오기위해 function();으로 넣는다면..
오버로딩시 에러가나는 두함수가 함께 불러올때를 해결할수 있는가?

#include <iostream>

namespace A_COM
{
 void function(int i=0)
 {
  std::cout<<i<<std::endl;
 }
}
namespace B_COM
{
 void function(void)
 {
  std::cout<<"A.com에서 정의한 함수"<<std::endl;
 }
}
using A_COM::function;
using B_COM::function;

int main(void)
{
 int a=10;
 function();
 return 0;
}

한마디로 이런고민인데 메인 함수에서 펀션을 불러왔을때와 펀션(a)를 불러왔을때
쉽게 사용하기 위해 유징을 사용한다면 똑같은 문제가 다시 발생하는건 아닌가?
...사용이 안되겠지?당연히-_-?;; 이름공간을 없애버리는게 유징아닌가?;;;
그럼 왜 유징을 사용하는거지-_-;;편리하기위해? 아무튼 오버로딩에서 이름공간에 유징까지
세가지가 혼합되니까 상당히 헷갈린다;;;;;;;;;;

오버로딩때문에 이름공간을 나누었더니 유징으로 없애서 다시 원상태?-_-;;

뭐 이해하기로는 대충 유징은 필요한 함수에게만 사용해서 그것을 편리하게 사용한다 이정도로
이해해둬야겠따..더생각하다간 더 뒤죽박죽이 될듯..

ㅡ_-뭐 틀린점있으면 댓글좀 달아주세용 ㅠㅠㅠ 열심히공부할게염 ㅋㅋ





댓글