[C++]명품 C++ 프로그래밍 실습문제 10장 16번
[C++]명품 C++ programming 실습문제 10장 16번
명품 C++ 프로그래밍실습문제/연습문제 /C++
//Circle.cpp
#include "Circle.h"
void Circle:: draw() {
cout << "Circle" << endl;
}
//Circle.h
#ifndef CIRCLE_H
#define CIRCLE_H
#include <iostream>
#include "Shape.h"
using namespace std;
class Circle : public Shape {
protected:
virtual void draw();
};
#endif
//Line.cpp
#include "Line.h"
void Line::draw() {
cout << "Line" << endl;
}
//Line.h
#ifndef LINE_H
#define LINE_H
#include <iostream>
#include "Shape.h"
using namespace std;
class Line : public Shape {
protected:
virtual void draw();
};
#endif
//main.cpp
#include <iostream>
#include <string>
#include "Shape.h"
#include "Circle.h"
#include "Rectangle.h"
#include "Line.h"
#include <vector>
using namespace std;
class UI { // 화면 출력 및 키 입력 함수
static int n; // 무슨 기능을 할지 입력 받은 숫자
public:
static void start(); // 첫줄에 나오는 그래픽 에디터 입니다 출력
static int menu(); // 삽입 삭제 모두보기 종료
static int insert(); // 도형 삽입
static int del(); // 도형 삭제
};
int UI::n = 0;
void UI::start() {
cout << "그래픽 에디터입니다." << endl;
}
int UI::menu() { // 메뉴 출력 및 입력
cout << "삽입:1, 삭제:2, 모두보기:3, 종료:4 >> ";
cin >> n;
return n;
}
int UI::insert() { // 도형 삽입에 대한 메뉴 출력 및 입력
cout << "선:1, 원:2, 사각형:3 >> ";
cin >> n;
return n;
}
int UI::del() { // 도형 삭제에 대한 메뉴 출력 및 입력
cout << "삭제하고자 하는 도형의 인덱스 >> ";
cin >> n;
return n;
}
class GraphicEditor {
vector<Shape*> v;
vector<Shape*>::iterator it;
public:
GraphicEditor() {}
void insert() {
int n = UI::insert();
if (n == 1) // 라인
v.push_back(new Line());
else if (n == 2) // 원
v.push_back(new Circle());
else if (n == 3) // 사각형
v.push_back(new Rectangle());
else cout << "입력 에러" << endl;
}
void deleteShape() {
int n = UI::del();
Shape* del;
it = v.begin();
for (int i = 0; i < n; ++i)
++it;
del = *it;
it = v.erase(it);
delete del;
}
void showAll() {
for (int i = 0; i < v.size(); ++i) {
cout << i << ": ";
v[i]->paint();
}
}
void start() {
UI::start();
for (;;) {
int m = UI::menu();
if (m == 1) // 삽입
insert();
else if (m == 2) // 삭제
deleteShape();
else if (m == 3) // 전체 보기
showAll();
else if (m == 4) break;
else cout << "입력 에러 " << endl;
}
}
};
int main() {
GraphicEditor* g=new GraphicEditor;
g->start();
delete g;
}
//Rectangle.cpp
#include "Rectangle.h"
void Rectangle::draw() {
cout << "Rectangle" << endl;
}
//Rectangle.h
#ifndef RECTANGLE_H
#define RECTANGLE_H
#include <iostream>
#include "Shape.h"
using namespace std;
class Rectangle : public Shape {
protected:
virtual void draw();
};
#endif
//Shape.cpp
#include <iostream>
#include "Shape.h"
Shape::Shape() { next = NULL; }
Shape* Shape::add(Shape* p) {
this->next = p;
return p;
}
void Shape::paint() {
draw();
}
Shape* Shape::getNext() { return next; }
//Shape.h
#ifndef SHAPE_H
#define SHAPE_H
#include <iostream>
using namespace std;
class Shape {
Shape* next;
protected:
virtual void draw() = 0;
public:
Shape();
virtual ~Shape() {}
Shape* add(Shape* p);
void paint();
Shape* getNext();
};
#endif
'C++' 카테고리의 다른 글
[C++]명품 C++ 프로그래밍 실습문제 11장 4번 (0) | 2023.01.26 |
---|---|
[C++]명품 C++ 프로그래밍 실습문제 11장 2번 (0) | 2023.01.26 |
[C++]명품 C++ 프로그래밍 실습문제 10장 14번 (1) | 2023.01.25 |
[C++]명품 C++ 프로그래밍 실습문제 10장 12번 (1) | 2023.01.25 |
[C++]명품 C++ 프로그래밍 실습문제 10장 10번 (0) | 2023.01.25 |