반응형

문제 5, 6번에 적용되는 BaseArray 클래스는 다음과 같다.

class BaseArray {
private:
	int capacity; // 배열의 크기
	int* mem; // 정수 배열을 만들기 위한 메모리의 포인터
protected:
	BaseArray(int capacity = 100)
	{
		this->capacity = capacity; mem = new int[capacity];
	}
	~BaseArray() { delete[]mem; }
	void put(int index, int val) { mem[index] = val; }
	int get(int index) { return mem[index]; }
	int getCapacity() { return capacity; }
};

 

문제

BaseArray를 상속받아 큐처럼 작동하는 MyQueue클래스를 작성하라. MyQueue를 활용하는 사례는 다음과 같다.

int main()
{
	MyQueue mQ(100);
	int n;
	cout << "큐에 삽입할 5개의 정수를 입력하라>> ";
	for (int i = 0; i < 5; i++)
	{
		cin >> n;
		mQ.enqueue(n); //큐에 삽입
	}
	cout << "큐의 용량 : " << mQ.capacity() << ", 큐의 크기 : " << mQ.length() << endl;
	cout << "큐의 원소를 순서대로 제거하여 출력한다>> ";
	while (mQ.length() != 0) {
		cout << mQ.dequeue() << ' '; //큐에서 제거하여 출력
	}
	cout << endl << "큐의 현재 크기 : " << mQ.length() << endl;
}

 

결과

큐에 삽입할 5개의 정수를 입력하라>> 1 3 5 7 9

큐의 용량:100, 큐의 크기:5

큐의 원소를 순서대로 제거하여 출력한다>> 1 3 5 7 9

큐의 현재 크기 : 0

 

소스코드

#include<iostream>
using namespace std;
class BaseArray {
private:
	int capacity; // 배열의 크기
	int* mem; // 정수 배열을 만들기 위한 메모리의 포인터
protected:
	BaseArray(int capacity = 100)
	{
		this->capacity = capacity; mem = new int[capacity];
	}
	~BaseArray() { delete[]mem; }
	void put(int index, int val) { mem[index] = val; }
	int get(int index) { return mem[index]; }
	int getCapacity() { return capacity; }
};
class MyQueue : public BaseArray {
	int front, rear;
public:
	MyQueue(int capacity) : BaseArray(capacity) { front = 0; rear = 0; }
	void enqueue(int data);
	int dequeue();
	int capacity();
	int length();
};
void MyQueue::enqueue(int data)
{
	if (rear >= getCapacity()) {
		cout << "큐가 가득찼습니다." << endl;
		exit(1);
	}
	put(++rear, data);
}
int MyQueue::dequeue()
{
	if (front == rear) {
		cout << "꺼낼 데이터가 없습니다." << endl;
		exit(1);
	}
	--rear;
	return get(++front);
}
int MyQueue::capacity()
{
	return getCapacity();
}
int MyQueue::length()
{
	return rear;
}
int main()
{
	MyQueue mQ(100);
	int n;
	cout << "큐에 삽입할 5개의 정수를 입력하라>> ";
	for (int i = 0; i < 5; i++)
	{
		cin >> n;
		mQ.enqueue(n); //큐에 삽입
	}
	cout << "큐의 용량 : " << mQ.capacity() << ", 큐의 크기 : " << mQ.length() << endl;
	cout << "큐의 원소를 순서대로 제거하여 출력한다>> ";
	while (mQ.length() != 0) {
		cout << mQ.dequeue() << ' '; //큐에서 제거하여 출력
	}
	cout << endl << "큐의 현재 크기 : " << mQ.length() << endl;
}
반응형
반응형

문제 3, 4번에 적용되는 2차원 상의 한 점을 표현하는 Point 클래스가 있다.

class Point {
	int x, y;
public:
	Point(int x, int y) { this->x = x; this->y = y; }
	int getX() { return x; }
	int getY() { return y; }
protected:
	void move(int x, int y) {
		this->x = x; this->y = y;
	}
};

 

문제

다음 main() 함수가 실행되도록 Point 클래스를 상속받는 ColorPoint 클래스를 작성하고, 전체 프로그램을 완성하라.

int main() {
	ColorPoint zeroPoint;
	zeroPoint.show();

	ColorPoint cp(5, 5);
	cp.setPoint(10, 20);
	cp.setColor("BLUE");
	cp.show();
}

 

결과

BLACK색으로 ( 0, 0 )에 위치한 점입니다.

BLUE색으로 ( 10, 20 )에 위치한 점입니다.

 

소스코드

#include<iostream>
#include<string>
using namespace std;
class Point {
	int x, y;
public:
	Point(int x, int y) { this->x = x; this->y = y; }
	int getX() { return x; }
	int getY() { return y; }
protected:
	void move(int x, int y) { this->x = x; this->y = y; }
};
class ColorPoint : public Point {
	string color;
public:
	ColorPoint(int x = 0, int y = 0, string color = "BLACK") : Point(x, y) {
		this->color = color;
	}
	void show();
	void setPoint(int x, int y);
	void setColor(string color);
};
void ColorPoint::show()
{
	cout << color << "색으로 ( " << getX() << ", " << getY() << " )에 위치한 점입니다." << endl;
}
void ColorPoint::setPoint(int x, int y)
{
	move(x, y);
}
void ColorPoint::setColor(string color)
{
	this->color = color;
}
int main() {
	ColorPoint zeroPoint;
	zeroPoint.show();

	ColorPoint cp(5, 5);
	cp.setPoint(10, 20);
	cp.setColor("BLUE");
	cp.show();
}

 

반응형
반응형

문제 3, 4번에 적용되는 2차원 상의 한 점을 표현하는 Point 클래스가 있다.

class Point {
	int x, y;
public:
	Point(int x, int y) { this->x = x; this->y = y; }
	int getX() { return x; }
	int getY() { return y; }
protected:
	void move(int x, int y) {
		this->x = x; this->y = y;
	}
};

 

문제

다음 main() 함수가 실행되도록 Point 클래스를 상속받은 ColorPoint 클래스를 작성하고, 전체 프로그램을 완성하라.

int main() {
	ColorPoint cp(5, 5, "RED");
	cp.setPoint(10, 20);
	cp.setColor("BLUE");
	cp.show();
}

 

결과

BLUE색으로 ( 10, 20 )에 위치한 점입니다.

 

소스코드

#include<iostream>
#include<string>
using namespace std;
class Point {
	int x, y;
public:
	Point(int x, int y) { this->x = x; this->y = y; }
	int getX() { return x; }
	int getY() { return y; }
protected:
	void move(int x, int y) {
		this->x = x; this->y = y;
	}
};
class ColorPoint : public Point {
	string color;
public:
	ColorPoint(int x, int y, string color);
	void setPoint(int x, int y);
	void setColor(string color);
	void show();
};
ColorPoint::ColorPoint(int x, int y, string color) : Point(x, y) {
	this->color = color;
}
void ColorPoint::setPoint(int x, int y)
{
	move(x, y);
}
void ColorPoint::setColor(string color)
{
	this->color = color;
}
void ColorPoint::show() {
	cout << color << "색으로 ( " << getX() << ", " << getY() << " )에 위치한 점입니다." << endl;
}
int main() {
	ColorPoint cp(5, 5, "RED");
	cp.setPoint(10, 20);
	cp.setColor("BLUE");
	cp.show();
}

설명

원칙적으로 파생 클래스의 생성자를 작성할 떄, 기본 클래스의 생성자 중 하나를 선택해야 한다. 하지만 선택하지 않을 경우 컴파일러가 암묵적으로 기본 클래스의 기본 생성자를 호출하도록 컴파일한다. 그러므로 ColorPoint의 생성자를 선언 할 때 : Point(x, y) 을 선언해 주지 않으면 기본 생성자를 호출하려고 하며, Point의 기본생성자가 존재하지 않으므로 컴파일 오류가 난다. 

반응형
반응형

문제 1, 2번에 적용도는 원을 추상화한 Circle 클래스가 있다.

class Circle {
	int radius;
public:
	Circle(int radius = 0) { this->radius = radius; }
	int getRadius() { return radius;}
	void setRadius(int radius) { this->radius = radius; }
	double getArea() { return 3.14 * radius * radius; }
};

 

문제

다음과 같이 배열을 선언하여 다음 실행 결과가 나오도록 Circle을 상속받은 NamedCircle 클래스와 main() 함수 등 필요한 함수를 작성하라.

NamedCircle pizza[5];

 

결과

5 개의 정수 반지름과 원의 이름을 입력하세요

1>> 5 크림피자

2>> 8 치즈피자

3>> 25 대왕피자

4>> 30 블랙홀피자

5>> 15 마늘피자

 

소스코드

#include<iostream>
#include<string>
using namespace std;
class Circle {
	int radius;
public:
	Circle(int radius = 0) { this->radius = radius; }
	int getRadius() { return radius; }
	void setRadius(int radius) { this->radius = radius; }
	double getArea() { return 3.14 * radius * radius; }
};
class NamedCircle : public Circle {
	string name;
public:
	NamedCircle() {};
	string getName() { return name; }
	void setName(string name) { this->name = name; }
};
int main()
{
	NamedCircle pizza[5];
	int r;
	string name;
	int count = 0;
	cout << "5 개의 정수 반지름과 원의 이름을 입력하세요" << endl;
	for (int i = 0; i < 5; i++)
	{
		cout << i + 1 << ">>";
		cin >> r >> name;
		pizza[i].setRadius(r);
		pizza[i].setName(name);
	}
	for (int i = 0; i < 4; i++)
	{
		if (pizza[i].getRadius() < pizza[i + 1].getRadius())
			count = i + 1;
	}
	cout << "가장 면적이 큰 피자는 " << pizza[count].getName() << "입니다." << endl;
}

설명

Circle과 같은 원리인 함수 NamedCircle클래스에 선언해 준 후 Circle의 멤버 함수와 NamedCircle의 멤버 함수를 이용하여 값들을 저장하고 반지름의 크기만 비교하여 가장 큰 곳의 인덱스를 기억하여 출력한다.

반응형
반응형

문제 1, 2번에 적용도는 원을 추상화한 Circle 클래스가 있다.

class Circle {
	int radius;
public:
	Circle(int radius = 0) { this->radius = radius; }
	int getRadius() { return radius;}
	void setRadius(int radius) { this->radius = radius; }
	double getArea() { return 3.14 * radius * radius; }
};

 

문제

다음 코드가 실행되도록 Circle을 상속받는 NamedCircle 클래스를 작성하고 전체 프로그램을 완성하라.

int main()
{
	NamedCircle waffle(3, "waffle"); //반지름이 3이고 이름이 waffle인 원
	waffle.show();
}

 

결과

반지름이 3인 waffle

 

소스코드

#include<iostream>
#include<string>
using namespace std;
class Circle {
	int radius;
public:
	Circle(int radius = 0) { this->radius = radius; }
	int getRadius() { return radius;}
	void setRadius(int radius) { this->radius = radius; }
	double getArea() { return 3.14 * radius * radius; }
};
class NamedCircle : public Circle {
	string name;
public:
	NamedCircle(int r, string name);
	void show();
};
NamedCircle::NamedCircle(int r, string name)
{
	setRadius(r);
	this->name = name;
}
void NamedCircle::show()
{
	cout << "반지름이 " << getRadius() << "인 " << name << endl;
}
int main()
{
	NamedCircle waffle(3, "waffle"); //반지름이 3이고 이름이 waffle인 원
	waffle.show();
}

설명

Circle을 상속받으므로 Circle에 존재하는 반지름 설정함수 setRadius(), 반지름 출력함수 getRadius()을 사용할 수 있다.

반응형

+ Recent posts