2. 함수오버로딩
함수오버라이딩
Ø C++에서 허용되는 방법
Ø 함수 이름이 같은 함수를 여러개 만들 때,
호출인자의 정보로 함수를 구분하는 방식
ü 핵심 콕콕!
Ø 객체간 상속관계에서 사용되는 문법
Ø 함수의 이름, 매개변수의 개수, 반환타입이
모두 일치해야한다.
Ø 함수의 재활용 및 활용적 측면이 장점이다.
3. 함수오버로딩
ü 개념콕콕!
Ø 조건 1 : 매개변수의 개수를 조절해 보자.
(1) void Draw (int iData1,);
(2) void Draw (int iData1, int iData2);
(3) void Draw (int iData1, int iData2, int iData3);
메인함수에서 Draw(100);을 출력한다면? 다음중 어떤함수가 호출될까요?
(1)번,
동일한 이름의 함수를 호출할 경우 ,
호출한 함수의 매개변수의 개수와 맞는 함수가 호출되는 것을 알 수 있다.
매개변수의 개수를 조절하여 효율적으로 함수를 사용 할 수 있다.
5. 함수오버로딩
ü 개념콕콕!
(1) void Draw (void);
(2) void Draw (int iData);
(3) void Draw (float fData);
Ø 조건 2 : 매개변수의 자료형을 다르게 해보자.
메인함수에서 Draw(100);을 출력한다면? 다음중 어떤함수가 호출될까요?
(2)번,
매개변수에 전달한 자료형에 따라서 어떤 함수가 호출되는지 알 수 있다.
만약 Draw(100.f)를 했다면? (3)번이 호출된다.
또한 인자 없는 void형태의 함수도 정의 할 수 있다. : 사용 : Draw();
7. 매개변수 초기화
ü 한 걸음 더...
Ø 디폴트 매개변수
선언부에 매개변수의 초기값을 미리 설정 할 수 있다.
void형태로 함수를 호출 할 경우, 미리 설정한 초기값이 셋팅되고
함수의 인자로 전달한 경우, 전달한 값이 세팅된다.
단, 초기화는 매개변수의 오른쪽부터 순서대로 해야 유효하다.
[출력결과]
8. 함수오버라이딩
ü 개념콕콕!
Ø 조건 1 : virtual 키워드를 이용하여 함수 오버라이딩을 사용해보자.
부모클래스의 함수를 사용하면서 다른 기능을 추가하는 좋은 방법이다.
부모클래스에서 virtual 키워드를 붙여 생성한 함수는,
자식클래스에서 동일하게 1.함수명 2.매개변수의 개수 3.반환형 이 같은
함수를 추가 할 수 있다.
이때 생성한 함수는 기존기능에 추가기능을 넣거나 새로운 디자인을 하는
경우 유용하게 사용 할 수 있다.
호출시 부모클래스의 함수가 자식클래스의 함수에 의해 가려지게 되는 것을
오버라이딩 되었다고 한다. [코드로 확인해 보자]
만약, 부모클래스의 함수를 호출 하고 싶을 경우
부모클래스::함수()로 명시해 주어야 한다.
10. 함수오버라이딩
ü 개념콕콕!
Ø 조건 2 : virtual 키워드 없이, 함수 오버라이딩을 사용해보자.
부모클래스의 함수를 사용하면서 다른 기능을 추가하는 좋은 방법이다.
부모클래스에서 virtual 키워드없이 생성한 함수는,
자식클래스에서 동일하게 1.함수명 2.매개변수의 개수 3.반환형 이 같은
함수를 추가 할 수 있다.
이때 생성한 함수는 기존기능에 추가기능을 넣거나 새로운 디자인을 하는
경우 유용하게 사용 할 수 있다.
호출시 클래스 형에 맞는 포인터로 가리켜야하며,
만약, 부모클래스의 함수를 호출 하고 싶을 경우
부모클래스::함수()로 명시해 주어야 한다.
11. [메인함수에서 부모포인터형으로 자식을 가리킨다.]
[출력결과]
virtual 키워드만 없앴는데 출력 결과가 달라졌다!
객체를 생성 후 이를 가리키는 포인터 타입! 부모의 함수가 호출되었다.
Ctrl + F5 , 코드로 확인 해보기.
12. [생성 클래스의 포인터형으로 가리킨다.]
[출력결과]
virtual 키워드가 없는 경우에는 가리키는 포인터형에 맞는
클래스의 함수가 호출 되는 것을 알 수 있다.
Ctrl + F5 , 코드로 확인 해보기.
13. ü 마무리 정리!
함수 오버로딩 함수 오버라이딩
매개변수의 개수
"다르다"
매개변수의 개수
"같다"
동일함수의
재정의와 관련
동일함수의
재사용과 관련
함수오버라이딩에서 virtual 키워드사용 유무에 따라 포인터의 타입을 신경 써야한다.