# 상속 (Inheritance)
# 오버로딩(Overloading)과 오버라이딩(Overriding)
# 가상함수, 순수가상함수 (Virtual Function, Pure Virtual Function)
# 멤버이니셜라이저 (Memeber Initializer)
이번시간에는
오버로딩과 오버라이딩에 대해 알아보도록할게요
스타크래프트 '오버로드' 아시나요?
네 그 오버로드입니다.
#오버로딩 (Overloading)
단어의 뜻을 한번 보겠습니다
감이 오시나요?
오버로딩(Overloading)
- 메서드의 이름이 같고
- 인자의 자료형이 다르거나
- 인자의 개수가 다르거나
여기 메서드가있습니다.
void add() { std::cout << "add()" << std::endl; } void add(int a) { std::cout << "add(int a)" << std::endl; } void add(int a, int b) { std::cout << "add(int a, int b)" << std::endl; } void add(double a, int b) { std::cout << "add(double a, int b)" << std::endl; } void add(double a, double b) { std::cout << "add(double a, double b)" << std::endl; }
# 오버라이딩 (Overriding)
간혹가다 오버로딩과 오버라이딩을 헷갈리는데요
오버라이딩이란
부모클래스에서 쓴 함수를 자식클래스에서 '재정의' 한다는것입니다.
class A { public: void function() { std::cout << "A" << std::endl; } }; class B : public A { public: void function() { std::cout << "B" << std::endl; } }; int main() { A a; B b; a.function(); b.function(); return 0; }
A클래스에도 function()
B클래스에도 function()
둘다 있습니다.
B클래스에서는 A의 function()을 오버라이딩(재정의) 한 것이죠
그래서 출력값이 위 그림과 같이 나옵니다.
주의할점은, 오버라이딩은 오버로딩과 다르게 '재정의'하는것이기 때문에 이름, 리턴타입, 인자의 타입,개수 가 완전히 같아야 한다는 점입니다.
예를들어
class Animal { public: void sound() { std::cout << "멍멍" << std::endl; } }; class Dog : public Animal { }; class Cat : public Animal { public: void sound() { std::cout << "야옹" << std::endl; } }; int main() { Dog d; Cat c; d.sound(); c.sound(); return 0; }
모든 동물들이 소리를 "멍멍" 낼까요?
아닙니다
고양이는 "야옹" 을 하고싶습니다. 그렇다면
sound()메서드를 Cat 클래스에서 오버라이딩(재정의) 하면 됩니다.
간단하죠?
'복습 > C++' 카테고리의 다른 글
[C++] 복습일지 inline함수 그리고 virtual (0) | 2018.01.24 |
---|---|
[C++] 복습일지 part 2 - 4 #멤버 이니셜라이저 (0) | 2018.01.21 |
[C++] 복습일지 part 2 - 3 #가상함수, 순수가상함수 (0) | 2018.01.14 |
[C++] 복습일지 part 2 - 1 #상속(Inheritance) (0) | 2018.01.14 |
[C++] 복습일지 part 1 (0) | 2018.01.07 |