티스토리 뷰

순수 가상 함수 (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에 실행될 구문을 선언한다. 하여 각 클래스는 동일한 함수를 사용하지만 서로 다른 기능을 수행할 수 있게 된다.

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함