함수와 네임스페이스

함수 호출

//Callee
void TestFunc(int a,int b=10)
{
	printf("a: %d. b: %\n",a,b);
}
//Caller
int _tmain(int argc, _TCHAR* argv[])
{
	TestFunc(3);
    TestFunc(3,4);
    return 0;
}

디폴트 파라미터는 함수 선언 시 작성

void TestFunc(int,int=10);
//Caller
int _tmain(int argc, _TCHAR* argv[])
{
	TestFunc(3);
    TestFunc(3,4);
    return 0;
}

//Callee
void TestFunc(int a,int b)
{
	printf("a: %d. b: %\n",a,b);
}
  1. 피호출자 함수 매개변수의 디폴트값은 반드시 오른쪽부터 기술
    2.매개변수가 여러 개일 때 왼쪽 첫 번째 매개변수의 디폴트 값을 기술하려면 나머지 오른쪽 모든 매개변수에 대한 디폴트 값 기술
  2. 호출자 함수가 피호출자 함수 매개변수 실인수를 기술하면 이는 왼쪽부터 짝을 맞추어 적용되며, 짝이 맞지 않는 매개변수는 디폴트 값을 적용

*구글 코딩스타일 가이드 정독 추천 -> 디폴트 파라미터 사용 비추천(원형 짐작어려움)
https://google.github.io/styleguide/cppguide.html

함수 다중 정의 overloading
문제: 호출함수가 모호함. 유지보수 측면에서 안 좋음 (같은 기능 함수가 여러 개)

#include <iostream>
#include <tchar.h>

int Add(int a, int b)
{
    return a + b;
}

double Add(doule a, double b)
{
	return a+b;
}
int _tmain(int argc, _TCHAR* argv[])
{
    std::cout << Add(3,4) <<std::endl;
    std::cout << Add(3.3,4.4) <<std::endl;
    return 0;
}

함수 탬플릿

#include <iostream>
#include <tchar.h>

template <typename T>
T Add(T a, T b)
{
    return a + b;
}
int _tmain(int argc, _TCHAR* argv[])
{
    std::cout << Add(3, 4) << std::endl;
    std::cout << Add(3.3, 4.4) << std::endl;
    return 0;
}

다중정의와 모호성
모호성은 유지보수를 힘겹게 만든다.

#include <iostream>
#include <tchar.h>

void TestFunc(int a, int b =4)
{

}

void TestFunc(int nParam)
{

}
int _tmain(int argc, _TCHAR* argv[])
{
	TestFunc(3);
	return 0;
}

인라인 함수
추천 강의 1) 변수와 상수 고급이론
2) 전처리기

네임스페이스 : 소속

namespace 이름
{

}

네임스페이스의 블록 네부에 선언하는 변수/함수들은 모두 명시한 '이름'(네임스페이스)에 속하게 된다.

using 선언

using namespace std;
.
.
.
cout<<g_nData<<endl;

소속 규정: 변수가 중복될 가능이 높기 때문

#include <iostream>
#include <tchar.h>
using namespace std;
namespace TEST
{
	int g_nData = 100;
	namespace DEV
	{
		int g_nData = 200;
		namespace WIN
		{
			int g_nData = 300;
		}
	}
}

int _tmain(int argc, _TCHAR* argv[])
{
	cout << TEST::g_nData << endl;
	cout << TEST::DEV::g_nData << endl;
	cout << TEST::DEV::WIN::g_nData << endl;
}

식별자 검색 순서
전역 함수인 경우
1) 현재 블록 범위
2) 현재 블록 범위를 포함하고 있는 상위 블록 범위
3) 가장 최근에 서언된 전역 변수나 함수
4) using 선언된 네임스페이스 혹은 전역 네임스페이스. 단, 두 곳에 동일한 식별자가 존재할 경우 컴파일 오류 발생

클래스 메서드인 경우
1) 현재 블록 범위
2) 현재 블록 범위를 포함하고 있는 상위 블록 범위 (최대 적용범위는 함수 몸체까지)
3) 클래스의 멤버
4) 부모 클래스의 멤버
5) 가장 최근에 선언된 전역 변수나 함수
6) 호출자 코드가 속한 네임스페이스의 상위 네임스페이스
7) using 선언된 네임스페이스, 단 두 곳에 동일한 식별자가 존재할 때

좋은 웹페이지 즐겨찾기