티스토리 뷰
순수 가상 함수 (Pure Virtual Fuction)
함수의 실체가 없는 함수
순수 가상 함수는 말그대로 존재하지 않는 개념과 같은 함수로 어떠한 실제 구동 코드 라인이 존재하지 않는다. 이러한 종류의 함수가 존재하는 이유는 다형성을 지원하고 특정 동작을 반드시 제공할 수 있도록 하며, 컴파일러 오류를 예방할 수 있다. C++에서는 함수를 선언하고 "=0"를 붙이면 순수 가상 함수를 선언할 수 있다.
추상 클래스(Abstract class)
순수 가상 함수가 하나라도 있는 클래스는 '추상 클래스'(abstract class)라고 불린다. 추상 클래스가 특별한 명칭이 붙는 이유는 추상 클래스로 인스턴스를 생성할 수 없기 때문이다.
#include <iostream>
#include <string>
using namespace std;
class Animal {
public:
virtual void makeSound() const = 0;
void sleep() const {
cout << "Animal is sleeping." << endl;
}
};
class Dog : public Animal {
public:
void makeSound() const override {
cout << "Dog barks: Woof! Woof!" << endl;
}
void fetch() const {
cout << "Dog is fetching a ball." << endl;
}
};
class Cat : public Animal {
public:
void makeSound() const override {
cout << "Cat meows: Meow! Meow!" << endl;
}
void climb() const {
cout << "Cat is climbing a tree." << endl;
}
};
int main() {
Dog* dog = new Dog();
Cat* cat = new Cat();
dog->makeSound();
cat->makeSound();
dog->sleep();
dog->fetch();
cat->climb();
delete dog;
delete cat;
return 0;
}
Dog barks: Woof! Woof!
Cat meows: Meow! Meow!
Animal is sleeping.
Dog is fetching a ball.
Cat is climbing a tree.
위 코드에서 Animal 클래스를 상속 받는 Dog와 Cat 클래스가 존재한다.
각 파생 클래스는 Animal 클래스에서 가상 함수 makeSound를 오버라이딩하여 파생 클래스에서 makeSound에 실행될 구문을 선언한다. 하여 각 클래스는 동일한 함수를 사용하지만 서로 다른 기능을 수행할 수 있게 된다.
'Computer Language > C & C++' 카테고리의 다른 글
[C++] 형변환 연산자 (static_cast, dynamic_cast, const_cast, reinterpret_cast) (0) | 2024.01.18 |
---|---|
[C++] 상속 6) 상속 관계 형변환 (0) | 2024.01.18 |
[C++] 메모리 소유권과 스마트 포인터 (0) | 2024.01.12 |
[C++] 예외 처리 (1) | 2024.01.03 |
[C++] 이동 시맨틱 (1) | 2024.01.03 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- dynamic_cast
- 입출력
- 레지스터
- thread
- 상속
- 알고리즘
- 운영체제
- c++
- malloc
- const
- 함수
- 명령어
- 초기화
- 클래스
- 멀티스레드
- 게임수학
- 포인터
- 크기
- 수학
- static_cast
- 할당
- 백준
- 구조
- 스레드
- 프로세스
- CPU
- 메모리
- New
- 인터럽트
- 컴파일
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함