객체지향 프로그래밍(OOP : Object-Oriented Programming) 의
중요한 특징 중 하나인 다형성은 하나의 객체를 여러가지의 타입으로 사용가능한 것을 말합니다.
C++ 에서 다형성의 구성 요소 중
- 함수(메소드) 오버 로딩
- 오버라이딩과 가상 함수 (virtual)
이 두 가지에 대해 알아보겠습니다.
오버로딩과 오버라이딩은 단어가 몹시 비슷해서 구분하기가 쉽지 않아,
항상 우리를 헷갈리게 한 두 녀석입니다.
하지만 이 녀석들은 확실하게 다른 역할을 합니다.
[오버로딩]
오버로딩(overloading) :
같은 함수의 이름을 매개 변수의 타입이나 개수가 다른 함수로 정의한다.
오버로딩의 특징 :
- 함수의 이름은 같아야 합니다.
- 매개 변수와 매개 변수의 개수 혹은 타입은 달라야 합니다.
- 매개 변수가 같고, 리턴 타입이 다를 때는 성립하지 않습니다.
- 위의 조건하에 여러 개 중복 작성할수 있습니다.
- 기존의 제공하고 있는 연산자를 재정의하여 사용자 정의 클래스로 사용할 수 있습니다.
(이것은 다음기회에 따로 다루도록 합시다.)
[오버로딩 간단한 예제코드]
#include <iostream>
#include "MyClass.h"
#pragma once
using namespace std;
class MyClass
{
public:
void myFunction()
{
cout << "myFunction call 1" << endl;
}
void myFunction(int num)
{
cout << "input num : " << num << endl;
}
void myFunction(bool bBool)
{
cout << boolalpha << "input value : " << bBool << endl;
}
};
int main()
{
MyClass myClass = MyClass();
myClass.myFunction();
myClass.myFunction(1337);
myClass.myFunction(true);
return 0;
}
[오버라이딩과 가상함수]
오버라이딩(overriding) :
상속받은 상위클래스의 가상 함수를 하위클래스에서 재정의한다.
가상 함수(virtual function):
기본 클래스에서 virtual 키위드로 선언된 멤버함수이다.
오버라이딩과 가상함수는
상속의 기능을 기본으로 구현되는 기술로써 객체지향 프로그래밍의 정수라 할수 있습니다.
가상 함수를 만드는 목적 혹은 오버라이딩의 목적은 파생 클래스들에서 각각의 목적에 맞게 가상 함수를 재정의 하도록 하는 것입니다. 또다른 표현으로는 "기본 클래스의 가상 함수를 파생 클래스에서 재정의하여 동적 바인딩1)을 유발한다" 라고 표현합니다.
virtual 키워드는 컴파일러에게 가상 함수에 대한 호출 바인딩을 실행 시간까지 지연하도록 지시합니다.
1) 함수 = 메소드
2) 동적 바인딩 : 가상 함수 코드를 컴파일 시, 컴파일러는 바인딩을 실행 시간에 결정하도록 미뤄둔다. 가상함수가 호출되면, 실행 중에 객체 내에서 오버라이딩된 가상 함수를 동적으로 호출한다.
'컴퓨터 > C++과 알고리즘' 카테고리의 다른 글
[C++] 매개변수 parameter (0) | 2025.01.28 |
---|---|
[C++] 변수, 연산자 (0) | 2025.01.28 |
C++ 14 예외처리 catch(char*) (0) | 2023.11.07 |
[C++] map - erase/clear 사용 시 메모리 누수 발생할 경우 (0) | 2022.11.11 |
[알고리즘] 피셔-예이츠 셔플(Fisher-Yates Shuffle) 알고리즘 (0) | 2022.06.16 |