반응형
7~8번에 쓰이는 사각형에 내접하는 도형을 표현하기 위한 Shape 클래스 입니다.
class Shape {
protected:
string name; // 도형의 이름
int width, height; // 도형이 내접하는 사각형의 너비와 높이
public:
Shape(string n = "", int w = 0, int h = 0) { name = n; width = w; height = h; }
virtual double getArea() { return 0; } //dummy 값 리턴
string getName() { return name; } //이름 리턴
};
문제 7
Shape 클래스를 상속받아 타원을 표현하는 Oval, 사각형을 표현하는 Rect, 삼각형을 표현하는 Triangular 클래스를 작성하라. main() 을 작성하고 실행하면 다음과 같다.
int main() {
Shape* p[3];
p[0] = new Oval("빈대떡", 10, 20);
p[1] = new Rect("찰떡", 30, 40);
p[2] = new Triangular("토스트", 30, 40);
for (int i = 0; i < 3; i++)
cout << p[i]->getName() << " 넓이는 " << p[i]->getArea() << endl;
for (int i = 0; i < 3; i++)delete p[i];
}
결과
빈대떡 넓이는 628
찰떡 넓이는 1200
토스트 넓이는 600
소스코드
#include<iostream>
#include<string>
using namespace std;
class Shape {
protected:
string name; // 도형의 이름
int width, height; // 도형이 내접하는 사각형의 너비와 높이
public:
Shape(string n = "", int w = 0, int h = 0) { name = n; width = w; height = h; }
virtual double getArea() { return 0; } //dummy 값 리턴
string getName() { return name; } //이름 리턴
};
class Oval : public Shape {
public:
Oval(string name, int width, int height) : Shape(name, width, height) {};
virtual double getArea()
{
return width * height * 3.14;
}
};
class Rect : public Shape {
public:
Rect(string name, int width, int height) : Shape(name, width, height) {};
virtual double getArea()
{
return width * height;
}
};
class Triangular : public Shape {
public:
Triangular(string name, int width, int height) : Shape(name, width, height) {};
virtual double getArea()
{
return (width * height) / 2;
}
};
int main() {
Shape* p[3];
p[0] = new Oval("빈대떡", 10, 20);
p[1] = new Rect("찰떡", 30, 40);
p[2] = new Triangular("토스트", 30, 40);
for (int i = 0; i < 3; i++)
cout << p[i]->getName() << " 넓이는 " << p[i]->getArea() << endl;
for (int i = 0; i < 3; i++)delete p[i];
}
문제 8
문제 7에 주어진 Shape 클래스를 추상 클래스로 만들고 문제 7을 다시 작성하라.
#include<iostream>
#include<string>
using namespace std;
class Shape {
protected:
string name; // 도형의 이름
int width, height; // 도형이 내접하는 사각형의 너비와 높이
public:
Shape(string n = "", int w = 0, int h = 0) { name = n; width = w; height = h; }
virtual double getArea() { return 0; } //dummy 값 리턴
string getName() { return name; } //이름 리턴
};
class Oval : public Shape {
public:
Oval(string name, int width, int height) : Shape(name, width, height) {};
double getArea()
{
return width * height * 3.14;
}
};
class Rect : public Shape {
public:
Rect(string name, int width, int height) : Shape(name, width, height) {};
double getArea()
{
return width * height;
}
};
class Triangular : public Shape {
public:
Triangular(string name, int width, int height) : Shape(name, width, height) {};
double getArea()
{
return (width * height) / 2;
}
};
int main() {
Shape* p[3];
p[0] = new Oval("빈대떡", 10, 20);
p[1] = new Rect("찰떡", 30, 40);
p[2] = new Triangular("토스트", 30, 40);
for (int i = 0; i < 3; i++)
cout << p[i]->getName() << " 넓이는 " << p[i]->getArea() << endl;
for (int i = 0; i < 3; i++)delete p[i];
}
반응형
'명품C++프로그래밍' 카테고리의 다른 글
명품 C++ Programming 실습문제 9장 10번 (0) | 2021.06.06 |
---|---|
명품 C++ Programming 실습문제 9장 9번 (0) | 2021.06.06 |
명품 C++ Programming 실습문제 9장 6번 (0) | 2021.06.01 |
명품 C++ Programming 실습문제 9장 5번 (1) | 2021.06.01 |
명품 C++ Programming 실습문제 9장 4번 (0) | 2021.06.01 |