번개애비의 라이프스톼일
도형을 그리고 면적을 계산하여 도형을 이동하는 작업을 코딩해보라. 본문
분문에 등장하는 Shape 라는 클래스에 추가로 move(), getArea() 함수를 모두 가상 함수로 정의하라. move()는 도형의 기준점을 이동한다. getArea()는 도형의 면적을 구한다. 도형을 그리고 면적을 계산하여 도형을 이동하는 작업을 코딩해보라.
C++ Espresso ch07 3문제
#include <iostream>
using namespace std;
class Shape {
protected:
double x, y;
public:
Shape(double xx = 0.0, double yy = 0.0) :x(xx), y(yy){}
virtual void draw() {
cout << "Shape Draw";
}
void setOrigin(double x, double y){
this->x = x;
this->y = y;
}
virtual double getArea() = 0;
virtual void move(double dx, double dy) = 0;
};
class Rectangle : public Shape {
private:
double width, height;
public:
Rectangle(double w=3.3, double h=4.4) :width(w), height(h){}
void setWidth(double w) {
width = w;
}
void setHeight(double h) {
height = h;
}
void draw() {
cout << "Rectangle Draw" << endl;
}
double getArea() { return width*height; }
void move(double dx, double dy) { cout << "Move the center of a Rectangle" << endl; x += dx; y += dy; }
};
class Circle : public Shape {
private:
double radius;
double const pi;
public:
Circle(double r=1.0) :radius(r), pi(3.141592){}
void setRadius(double r) {
radius = r;
}
void draw() {
cout << "Circle Draw" << endl;
}
double getArea() { return radius*radius*pi; }
void move(double dx, double dy) { cout << "Move the center of a circle" << endl; x += dx; y += dy; }
};
class Triangle : public Shape {
private:
int base, height;
public:
Triangle(double b = 1.1, double h = 4.4):base(b), height(h){}
void draw() {
cout << "Triangle Draw" << endl;
}
double getArea() { return base*height; }
void move(double dx, double dy) { cout << "Move the center of a Triangle" << endl; x += dx; y += dy; }
};
int main()
{
Shape *arrayOfShapes[3];
arrayOfShapes[0] = new Rectangle();
arrayOfShapes[1] = new Triangle();
arrayOfShapes[2] = new Circle();
for (int i = 0; i < 3; i++) {
arrayOfShapes[i]->draw();
cout << "Area : "<< arrayOfShapes[i]->getArea()<<endl;
arrayOfShapes[i]->setOrigin(9, 0);
arrayOfShapes[i]->move(0.5,0.8);
}
}
'IT' 카테고리의 다른 글
cpp 입출력 파일처리 예제 (0) | 2016.11.17 |
---|---|
c++ espresso ch10 [1] - (1), (2) (0) | 2016.11.03 |
오라클 실습 예제 (0) | 2016.10.27 |
[C] 문자열의 내용을 암호화 하는 함수를 만들어라 (0) | 2016.10.26 |
[C] deleteChar (char *str, char ch) 함수를 완성하라. (0) | 2016.10.26 |