가티있는블로그

[C++] 추상클래스, 인터페이스

2021. 8. 21. 23:06 | 프로그래밍/C++

순수 가상 함수

함수의 구현부가 없고, 선언부가 =0으로 끝나는 가상함수

 

추상 클래스

순수 가상 함수가 한 개 이상 있는 클래스.

객체를 생성할 수는 없지만(=인스턴스 생성불가) 포인터 변수는 만들 수 있다.

기반 클래스의 순수 가상함수의 구현부를 제공하지 않으면 파생 클래스도 추상 클래스가 된다.

추상 클래스의 설계 의도는 파생 클래스에게 특정 멤버 함수를 반드시 만들어야 하기 위한 용도

 

class Shape
{
public:
    virtual void Draw() = 0;
};

class Rect : public Shape
{
public:
    virtual void Draw() { }// 구현부
};

int main()
{
    Shape  s; // error
    Shape* p; // ok
    
    Rect r; 
}

 

인터페이스

인터페이스는 대부분 struct로 선언하게 되고,

객체지향을 위해서 설계 용도로 약한 결합을 위해 사용하게 되는 클래스이다.

순수가상함수 성질을 가지고 클래스 상속 특징에 기반한 활용 특징이 전부이다.

 

// 인터페이스
struct ICamera
{
    virtual void take() = 0;
};

class People
{
public:    
    void useCamera(ICamera* p) { p->take();}
};

class Camera : public ICamera
{
public:
    void take() 
    {
         std::cout << "take picture" << std::endl; 
    }
};

class HDCamera : public ICamera
{
public:
    void take() 
    {
         std::cout << "take picture hd" << std::endl; 
    }
};

int main()
{
    People p;
    Camera c1;
    p.useCamera(&c1);
    
    HDCamera c2;
    p.useCamera(&c2);

}

 

visual C++에서는 interface 자료형이 제공되는데 일반 struct형과 동일하다.

 

'프로그래밍 > C++' 카테고리의 다른 글

[C++] exception 예외처리  (0) 2021.08.22
[C++] 가상함수  (0) 2021.08.21
[C++] 상속  (0) 2021.08.21
[C++] this 포인터 개념  (0) 2021.08.20
[C++] 상수 멤버 함수 const member function  (0) 2021.08.20