[C언어]함수오버로딩과오버라이딩

14
FaceBook Group "코딩의 아침" Self Study & Sharing 함수오버로딩 / 함수 오버라이딩

Transcript of [C언어]함수오버로딩과오버라이딩

FaceBook Group "코딩의 아침"

Self Study & Sharing

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

함수오버로딩

함수오버라이딩

Ø C++에서 허용되는 방법

Ø 함수 이름이 같은 함수를 여러개 만들 때,

호출인자의 정보로 함수를 구분하는 방식

ü 핵심 콕콕!

Ø 객체간 상속관계에서 사용되는 문법

Ø 함수의 이름, 매개변수의 개수, 반환타입이

모두 일치해야한다.

Ø 함수의 재활용 및 활용적 측면이 장점이다.

함수오버로딩ü 개념콕콕!

Ø 조건 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)번,

동일한 이름의 함수를 호출할 경우 ,호출한 함수의 매개변수의 개수와 맞는 함수가 호출되는 것을 알 수 있다.

매개변수의 개수를 조절하여 효율적으로 함수를 사용 할 수 있다.

Ctrl + F5 , 코드로 확인 해보기.

[출력결과]

함수오버로딩ü 개념콕콕!

(1) void Draw (void);(2) void Draw (int iData);(3) void Draw (float fData);

Ø 조건 2 : 매개변수의 자료형을 다르게 해보자.

메인함수에서 Draw(100);을 출력한다면? 다음중 어떤함수가 호출될까요?

(2)번,

매개변수에 전달한 자료형에 따라서 어떤 함수가 호출되는지 알 수 있다.만약 Draw(100.f)를 했다면? (3)번이 호출된다.

또한 인자 없는 void형태의 함수도 정의 할 수 있다. : 사용 : Draw();

[출력결과]

Ctrl + F5 , 코드로 확인 해보기.

매개변수 초기화ü 한 걸음 더...

Ø 디폴트 매개변수

선언부에 매개변수의 초기값을 미리 설정 할 수 있다.

void형태로 함수를 호출 할 경우, 미리 설정한 초기값이 셋팅되고함수의 인자로 전달한 경우, 전달한 값이 세팅된다.

단, 초기화는 매개변수의 오른쪽부터 순서대로 해야 유효하다.

[출력결과]

함수오버라이딩ü 개념콕콕!

Ø 조건 1 : virtual 키워드를 이용하여 함수 오버라이딩을 사용해보자.

부모클래스의 함수를 사용하면서 다른 기능을 추가하는 좋은 방법이다.

부모클래스에서 virtual 키워드를 붙여 생성한 함수는, 자식클래스에서 동일하게 1.함수명 2.매개변수의 개수 3.반환형 이 같은함수를 추가 할 수 있다.

이때 생성한 함수는 기존기능에 추가기능을 넣거나 새로운 디자인을 하는 경우 유용하게 사용 할 수 있다.

호출시 부모클래스의 함수가 자식클래스의 함수에 의해 가려지게 되는 것을 오버라이딩 되었다고 한다. [코드로 확인해 보자]

만약, 부모클래스의 함수를 호출 하고 싶을 경우 부모클래스::함수()로 명시해 주어야 한다.

[메인함수에서 부모포인터형으로 자식을 가리킨다.]

[출력결과]

Ctrl + F5 , 코드로 확인 해보기.

함수오버라이딩ü 개념콕콕!

Ø 조건 2 : virtual 키워드 없이, 함수 오버라이딩을 사용해보자.

부모클래스의 함수를 사용하면서 다른 기능을 추가하는 좋은 방법이다.

부모클래스에서 virtual 키워드없이 생성한 함수는, 자식클래스에서 동일하게 1.함수명 2.매개변수의 개수 3.반환형 이 같은함수를 추가 할 수 있다.

이때 생성한 함수는 기존기능에 추가기능을 넣거나 새로운 디자인을 하는 경우 유용하게 사용 할 수 있다.

호출시 클래스 형에 맞는 포인터로 가리켜야하며,

만약, 부모클래스의 함수를 호출 하고 싶을 경우 부모클래스::함수()로 명시해 주어야 한다.

[메인함수에서 부모포인터형으로 자식을 가리킨다.]

[출력결과]

virtual 키워드만 없앴는데 출력 결과가 달라졌다!

객체를 생성 후 이를 가리키는 포인터 타입! 부모의 함수가 호출되었다.

Ctrl + F5 , 코드로 확인 해보기.

[생성 클래스의 포인터형으로 가리킨다.]

[출력결과]

virtual 키워드가 없는 경우에는 가리키는 포인터형에 맞는클래스의 함수가 호출 되는 것을 알 수 있다.

Ctrl + F5 , 코드로 확인 해보기.

ü 마무리 정리!

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

매개변수의 개수

"다르다"

매개변수의 개수

"같다"

동일함수의 재정의와 관련

동일함수의재사용과 관련

함수오버라이딩에서 virtual 키워드사용 유무에 따라 포인터의 타입을 신경 써야한다.

FaceBook Group "코딩의아침" www.jusinacademy.com

>> 잘못된 내용은 댓글로 피드백 부탁드립니다. 감사합니다. <<