C++에서는 추상 클래스 (abstract class) 라는게 존재한다.
추상클래스 란 , 함수의 정의가 이뤄지지 않고 함수만 선언된 순수 가상 함수가 존재할 때를 말한다
추상클래스는 객체가 될 수 없고 상속으로써만 사용할 수 있다
그리고 추상클래스(부모클래스) 에게 상속 받은 자식 클래스는 정의 되지 않은 순수 가상 함수를 오버라이드 시켜줘야 한다.
부모 클래스 - 자식 클래스를 이용하는 경우는 보통 공통 부분을 가진 부모를 상속해 줄 때 사용해준다
예를 들어 강아지 와 고양이 가 있다고 생각을 해보자
강아지와 고양이가 공통된 특징은 무엇일까?
1.소리를 낸다
2.눈,코,입이 존재한다
3,걷는다
공통된 요소는 많을 것이다
그렇다면 강아지와 고양이의 서로 다른점은 무엇일까?
1.생김새가 다르다
2.소리가 다르다
3. 등등.... 많을 것이다
그러면 우리는 동물이라는 추상클래스를 하나 만들어보자
#include <iostream>
using namespace std;
class Animal
{
public:
virtual void Sound() = 0;
};
Animal 이라는 추상 클래스를 정의 하였고 Sound라는 순수 가상함수를 선언하였다
class Cat : public Animal
{
public:
void Sound() { cout << "야옹야옹...." << endl; }
};
class Dog : public Animal
{
public:
void Sound() { cout << "멍멍...." << endl; }
};
강아지는 멍멍 소리를 내고 고양이는 야옹 야옹 소리를 낸다
void main()
{
// Cat cat; cat.Sound();
// Dog dog; dog.Sound();
//upcasting...
Animal* ani1 = new Dog; ani1->Sound(); //?
Animal* ani2 = new Cat; ani2->Sound(); //?
//강아지2마리, 고양이2마리를 생성하고 싶다.
Animal* woori[4];
woori[0] = new Dog;
woori[1] = new Cat;
woori[2] = new Cat;
woori[3] = new Dog;
//모든 동물들이 소리를 낸다.
for (int i = 0; i < 4; i++)
{
woori[i]->Sound();
}
}
'C++' 카테고리의 다른 글
[C++]템플릿 (0) | 2023.12.02 |
---|---|
[C++]연산자 오버로딩 (7) | 2023.11.28 |
[C++/OOP] 참조자 (19) | 2023.11.28 |
[C++]클래스를 이용한 학생 성적 관리 프로그램 (2) | 2023.11.22 |
[C++] 상속 부모와 자식 클래스 (0) | 2023.11.21 |