728x90
안녕하세요!
이번에는 C++ 언어를 사용하여 클래스의 상속과 다형성을 다루는 예제를 살펴보겠습니다.
클래스의 상속은 기존 클래스를 확장하거나 재사용하여 새로운 클래스를 생성하는 기능을 제공하며, 다형성은 객체의 타입에 따라 다른 동작을 수행할 수 있는 능력을 의미합니다.
예제 코드
#include <iostream>
using namespace std;
class Animal
{
public:
virtual void makeSound()
{
cout << "동물이 소리를 낸다." << endl;
}
};
class Dog : public Animal
{
public:
void makeSound() override
{
cout << "멍멍! 멍멍!" << endl;
}
};
class Cat : public Animal
{
public:
void makeSound() override
{
cout << "야옹~ 야옹~" << endl;
}
};
int main()
{
Animal* animal1 = new Animal();
Animal* animal2 = new Dog();
Animal* animal3 = new Cat();
animal1->makeSound();
animal2->makeSound();
animal3->makeSound();
delete animal1;
delete animal2;
delete animal3;
return 0;
}
<코드 해석>
class Animal
{
public:
virtual void makeSound()
{
cout << "동물이 소리를 낸다." << endl;
}
};
- 동물을 나타내는 기본 클래스입니다.동물이 소리를 내는 makeSound가상 함수를 public 멤버함수로 가지고있어, 파생 클래스에서 재정의할 수 있습니다.
class Dog : public Animal
{
public:
void makeSound() override
{
cout << "멍멍! 멍멍!" << endl;
}
};
- 개를 나타내는 파생 클래스입니다. Animal클래스를 상속받아, makeSound 함수를 재정의(override)하였습니다.
class Cat : public Animal
{
public:
void makeSound() override
{
cout << "야옹~ 야옹~" << endl;
}
};
- 고양이를 나타내는 파생 클래스입니다. 마찬가지로 Animal클래스를 상속받아, makeSound 함수를 재정의(override)하였습니다.
Animal* animal1 = new Animal();
Animal* animal2 = new Dog();
Animal* animal3 = new Cat();
- Animal클래스의 포인터에 각각 Animal객체, Dog객체, Cat객체를 동적할당 해줍니다.
- Dog, Cat 객체는 Animal클래스를 상속 받았으므로, Animal포인터로 Dog, Cat 객체를 가리킬수 있습니다.
animal1->makeSound();
animal2->makeSound();
animal3->makeSound();
- 각각의 동물 객체가 소리를 내도록 호출합니다. 동적 바인딩에 의해 각 객체의 실제 타입에 맞는 함수가 호출됩니다.
delete animal1;
delete animal2;
delete animal3;
- delete키워드를 사용하여 동적으로 생성한 객체들을 Heap메모리에서 해제합니다.
이번 예제를 통해 클래스의 상속과 다형성의 개념을 이해하고 활용하는 방법을 알아보았습니다.
이번예제는 동적할당, 클래스의 상속, 가상함수 등 복합적인 요소가 들어가있어 프로그래밍이 익숙하지 않으신분들은 조금 어려우실수도 있지만
한번 잘 이해해놓으면 이번 예제는 쓸일이 많으니 어려우시더라도 이해하도록 노력해보시기 바랍니다.
감사합니다!
728x90
'[C++] > 콘솔 프로그래밍' 카테고리의 다른 글
[C++] 콘솔 프로그래밍 : 열거형(enum) 활용 (34) | 2023.06.12 |
---|---|
[C++] 콘솔 프로그래밍 : 포인터 연산 (54) | 2023.06.11 |
[C++] 콘솔 프로그래밍: 클래스와 객체 (30) | 2023.06.09 |
[C++] 콘솔 프로그래밍 : 함수 오버로딩 (38) | 2023.06.08 |
[C++] 콘솔 프로그래밍 : 동적 메모리 할당 (10) | 2023.06.08 |