본문 바로가기

C++

[C++] 오버로딩 (Overloading) 및 오버라이딩 (Overriding)

반응형

오버로딩오버라이딩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