반응형
도형편집기로 배우는 객체지향 프로그래밍
- 각 도형을 타입으로 만들면 편함
- 모든 도형 공통의 기반 클래스가 있으면 각 도형을 묶어서 관리 할 수 있음
- 모든 도형의 공통의 특징(Draw)는 반드시 기반 클래스(Shape)에도 있어야 함
- 기반 클래스의 함수 중 파생 클래스가 재정의 하게 되는 모든 함수는 가상함수가 되어야 함
다형성(Polymorphism)
- 동일한 코드 표현(함수 호출)이 상황에 따라 다르게 동작하는 것
- OCP(Open Close Principle)
- 기능 확장에는 열려(Open) 있고 코드 수정에는 닫혀(Close) 있어야 한다는 이론(Principle)
- 다형성은 OCP를 만족할 수 있는 좋은 코드
#include <iostream>
#include <vector>
// 도형
class Shape
{
public:
virtual void Draw()
{
std::cout << "Shape Draw" << std::endl;
}
};
// 사각형
class Rect : public Shape
{
public:
virtual void Draw() override
{
std::cout << "Rect Draw" << std::endl;
}
};
// 원
class Circle : public Shape
{
public:
virtual void Draw() override
{
std::cout << "Circle Draw" << std::endl;
}
};
// 삼각형
class triangle : public Shape
{
public:
virtual void Draw() override
{
std::cout << "Circle Draw" << std::endl;
}
};
int main()
{
std::vector<Shape*> v1; // 도형 저장 버퍼
while (1)
{
int n;
std::cin >> n;
if (n == 1) v1.push_back(new Rect); // 사용자 입력이 1일때 사각형 추가
else if (n == 2) v1.push_back(new Circle); // 사용자 입력이 2일때 원형 추가
else if (n == 9) // 사용자 입력이 9일때 추가된 도형 전체 출력
{
for (int i = 0; i < v1.size(); i++)
v1[i]->Draw(); // 다형성(Polymorphism) 특징
}
}
}
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
C++ 인터페이스(Interface) (0) | 2019.05.12 |
---|---|
C++ 추상 클래스(Abstract Class) (0) | 2019.05.12 |
C++ 오버라이드, 가상함수(Override & Virtual Function) (0) | 2019.05.12 |
C++ 업캐스팅(Up Casting) (0) | 2019.05.12 |
C++ 상속(Inheritance) (0) | 2019.05.12 |