반응형
오버로딩과 오버라이딩은 C++에서만 지원한다. C에서는 지원하지 않는다.
오버로딩(overloading)은 메소드의 이름은 같으나, 매개변수가 다른 경우를 말한다.
즉, 메소드의 매개변수 개수, 타입 등을 달리하여 같은 이름의 메소드를 여러 개 정의할 수 있다.
#include <iostream>
using namespace std;
// 매개변수가 없는 overloading() 함수 정의
void overloading(){
cout << "No parameter" << endl;
}
// int 타입의 매개변수가 하나 존재하는 overloading() 함수 정의
void overloading(int a){
cout << "Have int parameter" << endl;
}
// int 타입의 매개변수가 다수 존재하는 overloading() 함수 정의
void overloading(int a, int b){
cout << "Have int parameters" << endl;
}
// char 타입의 매개변수가 하나 존재하는 overloading() 함수 정의
void overloading(char a){
cout << "Have char parameter" << endl;
}
int main(){
overloading(); // 매개변수가 없는 overloading() 함수 호출
overloading(9); // int 타입의 매개변수가 하나 존재하는 overloading() 함수 호출
overloading(1, 2); // int 타입의 매개변수가 다수 존재하는 overloading() 함수 호출
overloading('A'); // char 타입의 매개변수가 하나 존재하는 overloading() 함수 호출
return 0;
}
오버라이딩(overriding)은 상위 클래스를 상속받은 하위 클래스에서 상위 클래스의 메소드를 다시 정의하여 사용할 수 있다. 메소드를 재정의한다고는 하지만 상위 클래스에 기존의 메소드는 여전히 존재하고 있다. 각기 다른 메소드로 존재하고 있으며 하위 클래스의 메소드를 먼저 호출할 뿐이다. 또한 다시 정의하는 메소드의 이름, 매개변수 타입 및 개수, 반환 타입 등은 상위 클래스의 메소드와 동일하다.
즉 상위 클래스에 선언된 메소드와 같은 형태의 메소드를 하위 클래스에 선언하지만, 상위 클래스에는 여전히 같은 형태의 메소드가 존재하고 있다.
#include <iostream>
using namespace std;
// 상위 클래스를 선언한다.
class superClass{
private:
public:
void function(){
cout << "super class" << endl;
}
};
// 상위 클래스 'superClass'를 상속받는 하위 클래스를 선언한다.
class subClass : public superClass{
private:
public:
// 상위 클래스에 존재하는 메소드를 다시 정의해준다.
// 'superClass'의 function() 함수는 'subClass'에 의해 오버라이딩 되었다.
void function(){
cout << "sub class" << endl;
}
};
int main(){
superClass super;
super.function();
subClass sub;
sub.function();
return 0;
}
반응형
'C++' 카테고리의 다른 글
[C++] extern (0) | 2019.12.07 |
---|---|
[C++] strncpy() (0) | 2019.12.06 |
[C++] malloc()-free() 와 new-delete (0) | 2019.11.16 |
[C++] 정적 할당(Static Allocation) 및 동적 할당(Dynamic Allocation) (0) | 2019.11.16 |
[C++] 클래스 상속 (Class Inheritance) (0) | 2019.11.12 |