1. 함수 오버로딩

 

함수 오버로딩이란 무엇입니까?

 함수 이름과 전달 인자 정보를 동시에 참조하여 호출할 함수를 결정하는 기능입니다. 

  하나의 함수 이름으로 여러 기능을 정의할 수 있게 되므로 '함수의 다형'을 수행할 수 있습니다. 

 함수 오버로딩과 디폴트 매개변수를 함께 사용하면 모호성 오류가 발생할 수 있으므로 주의해야합니다.

 const 멤버함수의 경우 함수 오버로딩의 조건이 될 수 있습니다.

 

함수 오버로딩 vs 함수 오버라이딩

 

시점으로도 비교될 수 있겟다

 

2. 매개변수 디폴트 값

 

디폴트 매개변수란 무엇입니까?

 함수에 인자전달을 생략할 수 있는 기능입니다.

  함수 인자를 기본 값으로 넘겨주고 싶을 때 사용합니다. 

 디폴트 매개변수 지정은 가장 우측에 있는 매개변수부터 지정해줘야 합니다.

 

 

 

3. 참조자의 이해

 

참조자란 무엇입니까?

 기존에 선언된 변수에 붙이는 별칭이라고 할 수 있습니다. 

  참조자가 만들어지면 변수이름과 사실상 차이가 없게 됩니다. 

 변수에 대한 접근을 포인터보다 더 편리하게 하기 위해서 사용한다고 볼 수 있습니다. 

  포인터에 대한 연산자도 필요 없으며, 포인터 변수 메모리를 따로 할당할 필요 없이 사용 가능합니다. 

 

 

call by value

 함수 호출 시 넘기는 값을 복사하여 함수의 매개변수에 넣어 사용하는 방법입니다.

  복사되기 때문에 함수 호출부와 호출된 함수에서 사용되는 변수가 각각 다른 변수로 취급되는 특징이 있습니다.

  사본을 만들어내는 작업이므로 고비용 문제가 발생하며 특수한 경우 복사손실이 발생할 수 있습니다.

 

call by address

 함수 호출 시 메모리 주소값을 복사하여 함수의 매개변수에 넣어 사용하는 방법입니다.

  메모리 주소 값이 그대로 복사되었으므로 호출부와 호출된 함수의 변수는 동일한 메모리 주소를 가리키게 됩니다.

  따라서 호출된 함수에서 매개변수를 건든다면 원본값이 변경될 수 있는 문제가 발생하게 됩니다.

 

 

call by reference

 함수 호출 시 넘기는 값을 레퍼런스 매개변수로 받아 사용하는 방법입니다.

  참조하기 때문에 호출부와 호출된 함수의 변수는 동일하다고 볼 수 있습니다.

  따라서 호출된 함수에서 매개변수를 건든다면 원본값이 변경될 수 있는 문제가 발생하게 됩니다.

 

 

call by value vs call by reference

 함수 호출부의 변수와 호출된 함수의 매개변수 관계를 기준으로 둘을 구분할 수 있습니다.

  call by value는 복사가 이루어지므로 두 변수의 메모리공간이 달라 원본값을 변경할 수 없습니다.

   사본이 만들어지므로 고비용 문제가 발생하고 특수한 경우 복사 손실 문제를 가질 수 있습니다.

  반면 call by reference는 참조자 매개변수로 받으므로 두 변수는 사실상 동일하며 원본값 또한 변경 가능합니다.

   따라서 원본값이 변경되는 문제가 발생할 수 있습니다.

 

 

call by address vs call by reference

 함수의 인자를 전달하는 방법으로 둘을 구분할 수 있습니다.

  call by address는 변수의 주소를 보내고 전달받는 함수에서 포인터 형으로 받습니다. 

  call by reference는 변수를 보내고 받을 때 레퍼런스로 초기화하여 받습니다. 

 

 

복사손실(슬라이스)문제

 자식객체가 전부 복사되지 않고 부모객체 만큼만 복사되는 문제입니다.

 call by value 시 함수 호출부에 자식 객체를 넣고 인자로 부모 객체형으로 call by value 할 때 발생합니다.

 복사 생성자가 호출되면서 부모 객체를 새로 복사해서 만드므로 자식만 가진 내용은 손실되는 것입니다.

 

4. 인라인 함수

 

인라인 함수란 무엇입니까?

 매크로 함수의 장점은 취하고 단점은 보완한 함수입니다. 

  간단한 함수 기능을 빠르게, 그리고 매크로 함수의 단점 없이 사용할 수 있습니다. 

 inline 키워드로 사용하지만 인라인화에 대한 결정권은 컴파일러에게 있습니다.

  inline 선언을 하더라도 인라인화되지 않을 수 있으며,

  반대로 inline 선언하지 않더라도 컴파일러가 inline화 할 수 있습니다.

  기준은 컴파일러가 직접 치환하는 비용이 해당 함수를 호출하여 리턴받는 비용보다 작은지 큰지에 따릅니다.

 

 

 

매크로 함수란 무엇입니까?

 전처리기가 컴파일 이전에 치환하는 매크로 기능을 함수처럼 사용하는 것입니다.

 즉 함수 호출 없이, 간단한 함수 기능을 수행하기 위해 사용합니다.

 전처리기 과정에서 치환되는 것이므로 이에 따른 단점이 존재합니다.

  디버깅이 불가능합니다.

  자료형에 독립적입니다.

  연산자 우선순위의 영향으로 원하지 않는 결과가 나올 수 있으므로 소괄호 연산자를 사용해야 할 수 있습니다. 

 

인라인 함수 vs 매크로 함수

 치환하는 주체에 차이가 있습니다. 

  인라인 함수는 컴파일러에 의해, 매크로 함수는 전처리기에 의해 치환됩니다.

   따라서 전자는 디버깅이 가능하고 자료형에 독립적이지만 

   후자는 디버깅이 불가능하고 자료형에 독립적이지 않습니다.

 치환을 결정하는 주체에도 차이가 있습니다. 

  인라인 함수는 사용자가 inline 키워드를 사용하더라도 결정은 컴파일러가 합니다.

  매크로 함수는 사용자가 매크로 함수를 사용하면 무조건 치환되므로 결정권은 사용자에게 있습니다.

 

 

 

5. 연산자 오버로딩

 

연산자 오버로딩이란 무엇입니까? 

 하나의 연산자를 여러 의미로 사용할 수 있게하는 기능입니다. 

  함수 오버로딩의 개념을 연산자에 확장시킨 것입니다. 

 복잡한 함수 이름 대신 간단하게 연산자로 사용할 수 있다는 장점이 있습니다.

'언어 > C++' 카테고리의 다른 글

질문형식 6. 상속의 다형성  (0) 2020.02.03
질문형식 5. 클래스의 상속  (0) 2020.02.03
질문형식 4. Class 기본  (0) 2020.02.03
질문형식 2.C와 C++ 비교  (0) 2020.02.03
질문형식1. 메모리 영역, exe 파일 생성과정  (0) 2020.02.03
블로그 이미지

연한그린커리

,