번개애비의 라이프스톼일

도형을 그리고 면적을 계산하여 도형을 이동하는 작업을 코딩해보라. 본문

IT

도형을 그리고 면적을 계산하여 도형을 이동하는 작업을 코딩해보라.

번개애비 2016. 10. 27. 16:12

분문에 등장하는 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);

}

}



Comments