[C++] 오버로딩, 오버라이딩, 가상 함수, 순수가상함수

amudomolla·2023년 6월 23일
0

C++

목록 보기
11/12

참고 사이트


오버로딩(Overloading)


함수의 중복 정의

인자의 자료형이나 수가 다른 함수를 같은 이름으로 여러번 중복 정의하는 것

(넘겨주는 인자의 수 혹은 자료형에 따라 출력되는 결과가 다름)

1) 함수명이 같아야 한다.

2) 매개변수의 수가 다르거나, 아니면 그 매개변수의 수가 같고 자료형이 달라야만 한다.

3) 위의 두 조건을 모두 만족하면 반환형의 차이는 함수 오버로딩에 영향을 미치지 않는다.


오버라이딩(Overriding)


함수의 재정의

이미 있는 함수를 무시해버리고 새롭게 함수를 재정의하는 것

즉, 부모 클래스와 자식 클래스의 상속 관계에서, 부모 클래스에 이미 정의된 함수를 같은 이름으로 자식 클래스에서 재정의하는 것을 의미


1) 오버라이드 하고자 하는 함수가 상위 클래스에 존재해야 한다.
2) 함수명이 같아야 한다.
3) 매개변수의 수와 자료형이 같아야 한다.
4) 함수의 리턴형이 같아야 한다.
5) 상위 메소드와 동일하거나 접근 범위가 넓은 접근 제한자를 사용해야 한다.


가상 함수(Virtual Function)


선언한 자료형으로 포인터가 고정되는 것이 아니라, 실제 가리키는 객체를 파악하고 해당 자료형으로 포인터를 바꾸어서 판단하도록 해주는 함수

[선언]

virtual 키워드를 선언문 앞에다 붙이기

[예시]
public:
	virtual void func() { std::cout << "가상 함수"; }

순수 가상 함수(Pure Virtual Function)


가상 함수가 실제로 가리키는 객체에 따라 실행 코드가 달라지고, 재정의할 수 있는 반면, 순수 가상 함수는 함수의 선언만 있고 정의가 없는 것으로, 자식 클래스에서 반드시 재정의하여 하는 함수

순수 가상 함수를 포함하는 클래스를 추상 클래스(abstract class)라고 부름

[선언]

가상 함수에서 정의를 제외하고, 뒷부분에 =0; 을 덧붙여주기

[예시]
public:
	virtual void func() = 0;
profile
👩‍💻 기록 및 복습을 위함

0개의 댓글