순수 가상 함수
함수의 구현부가 없고, 선언부가 =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 |