c++ 0610

|


#함수 오버로딩
같은 이름의 함수를 여러 개 쓸 수 있다.
C는 함수의 이름으로만 심볼을 생성하기 때문에 동일한 이름의 함수를 사용할 수 없다.
C++는 함수의 이름에 시그니처(매개변수의 타입과 갯수, 리턴 타입은 포함되지 않음)에 대한 정보를 추가하여 심볼을 생성하기 때문에 동일한 이름의 함수를 사용할 수 있다.

오버로딩이 가능한 경우
1. 매개변수 갯수는 같지만 타입이 다른 경우
2. 매개변수 타입은 같지만 갯수가 다른 경우

오버로딩이 불가능한 경우
1. 두 함수의 매개변수가 각각 일반 자료형, 레퍼런스형인 경우 이 둘의 실인자의 구별이 불가능하다.
2. 두 함수의 리턴 타입만 다른 경우 이 둘의 실인자의 구별이 불가능하다.

함수 찾는 순서
1. Exact Match
2. Promotion
3. Standard Conversions
4. User-defined Conversions

#디폴트 인자
디폴트 인자는 항상 오른쪽부터 설정한다. 그래야만 함수의 인자들을 왼쪽부터 넣어도 문제가 없다.

오버로딩과 디폴트 인자의 충돌
void Ambiguous(int a, int b = 100);
void Ambiguous(int a);
void Ambiguous(10);

#동적 메모리 할당
컴파일 타임에는 크기를 알 수 없으며, 런 타임에 할당할 메모리의 크기가 결정되어 할당하는 방식
할당과 해제의 시점이 자유롭다.
함수 내에서 할당한 경우, 함수가 종료되더라도 Heap 영역에 남아있다.

Data 영역 - 전역 변수, Static 변수가 할당된다. 프로그램 시작시 할당, 프로그램 종료시 해제.
BBS 영역 - Data 영역에 포함된 영역. 초기화하지 않은 전역 변수가 할당된다.
Heap 영역 - 동적 할당에 사용되는 메모리
Stack 영역 - 지역변수가 할당된다. 함수 시작시 할당, 함수 종료시 해제.

main() 함수가 아닌 다른 함수에서 동적메모리를 할당하고 해제하지 않은 경우에는 반드시 그 포인터 변수를 main() 함수로 넘겨주어야 메모리 해제가 가능하다??















'C++' 카테고리의 다른 글

C++ 생성자  (0) 2010.08.13
생성자와 소멸자  (0) 2010.08.13
c++ 오버라이딩  (0) 2010.07.03
동적 할당 0614  (0) 2010.06.14
c++0608  (0) 2010.06.08
And