1. 문제

 

7. Shape 클래스를 상속받아 타원을 표현하는 Oval, 사각형을 표현하는 Rect, 삼각형을 표현하는 Triangular 클래스를 작성하라. main()을 작성하고 실행하면 다음과 같다.

 

8. 문제 7에 주어진 Shape 클래스를 추상 클래스로 만들고 문제 7을 다시 작성하라.

 

 

 

2. 결과

 

7.

8.

 

 

3. 코드

 

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; }
	string getName() { return name; }
};

class Oval : public Shape {
public :
	Oval(string n, int w, int h) : Shape(n, w, h) {;}
	double getArea() { return width*height*3.14; }
};
class Rect : public Shape {
public :
	Rect(string n, int w, int h) : Shape(n, w, h) {;}
	double getArea() { return width*height; }
};
class Triangular : public Shape {
public :
	Triangular(string n, int w, int h) : Shape(n, w, h) {;}
	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.

#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() = 0;
	string getName() { return name; }
};

class Oval : public Shape {
public :
	Oval(string n, int w, int h) : Shape(n, w, h) {;}
	double getArea() { return width*height*3.14; }
};
class Rect : public Shape {
public :
	Rect(string n, int w, int h) : Shape(n, w, h) {;}
	double getArea() { return width*height; }
};
class Triangular : public Shape {
public :
	Triangular(string n, int w, int h) : Shape(n, w, h) {;}
	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];
}

 

4. 설명

 

사실 코드를 2개 써 작성해 놨지만 한 줄만 다를 뿐 결국은 같은코드이다.

 

8번 문제의 의도는 추상 클래스가 무엇인지 알고 있는지 물어보는 것인 것 같다.

 

추상 클래스란 최소 하나의 순수 가상 함수를 가진 클래스를 말한다.

 

Shape 함수의 getArea메소드는 어차피 각 자식 클래스에서 오버라이딩 하므로 Shape의 getArea메소드를 순수 가상함수로 만들어주면 Shape는 추상 클래스로 만들면서 같은 결과를 구할 수 있다.

 

+ Recent posts