티스토리 뷰

반응형

* 문제

데이터를 관리하는 부모 클래스 Memory class가 있다. Memory class를 상속받는 자식 클래스 MyStack과 MyQueue class가 있다. MyStack class는 먼저 입력한 메모리가 나중에 메모리가 삭제되는 구조이고, MyQueue class는 먼저 입력한 메모리가 먼저 메모리가 삭제되는 구조이다. 동적 할당과 동적 바인딩을 이용하여 메모리 구조 프로그램을 작성하시오.

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
 
#include<iostream>
#include<string>
using namespace std;
 
class Memory {
 
public:
    int * m;//메모리 포인터
    int count;//배열 숫자 세는 변수
    Memory() {//메모리 생성자
        count = -1;
        m = new int[20]; //메모리 할당//stack과 queue 모두 메모리 20개씩 할당
    }
    ~Memory() { delete[]m; }//소멸자 함수
 
    void push() {
        if (count<19)//배열 갯수가 20개가 넘으면 예외처리
        {    count++;
            cout << "넣을 값을 입력하세요:" << endl;
            cin >> m[count];}
        else
        {cout << "데이터가 꽉차서 넣을수 없습니다." << endl;}
    }
    virtual void pop() = 0;//순수가상함수로 자식클래승에 강제성 부여
 
    void print() {//출력함수
        if (count==-1)//배열 갯수가 마이너스면 출력 불가능
        {    cout << "데이터가 없습니다." << endl;}
        for (int i = 0; i < count+1; i++)
        {    if (m[i]!=NULL)
            {    cout << m[i] << "번째 값" << endl;}
            else
            {    break;}
        }
    }
};
class MyStack :public Memory {//선입 후출(FILO)
 
public:
    MyStack() {}
 
    void pop() {//stack는 빠져나가는 순서가 먼저들어온 것이 나중에 나가는 구조다
                //m[count]=0;
        if (count>=0)
        {    cout << m[count] << "번째 데이터를 꺼냈습니다." << endl;
            count--;//배열 갯수 삭제}
        else
        {    cout << "데이터가 없어서 빼낼수 없습니다." << endl;}
    }
 
};
class MyQueue :public Memory {//선입선출(FIFO)
 
public:
    MyQueue() {}
 
    void pop() {//queue는 빠져나가는 순서가 먼저들어온 것이 먼저 나가는 구조다
        if (count >= 0)
        {    cout << m[count] << "번째 데이터를 꺼냈습니다." << endl;
            for (int i = 0; i < count; i++)
            {    m[i] = m[i + 1];}
            count--;//배열 갯수 삭제}
        else
        {    cout << "데이터가 없어서 빼낼수 없습니다." << endl;}
    }
};
 
class menu {
    int mode, sel, num;
    Memory *m;//메모리 타입의 포인터//동적 바인딩으로 다형성 가능
    MyStack ms;
    MyQueue mq;
 
public:
    void me() {
        sel = 0;
        while (sel!=3)
        {    mode = 0;
            cout << "메모리 공간을 선택하세요" << endl;
            cout << "[1.Stack/2.Queue/3.종료]" << endl;
            cin >> sel;
            switch (sel)
            {
            case 1://stack
                m = &ms;
                while (mode!=4)
                {    cout << "[Stack]에서 무엇을 하시겠습니까?" << endl;
                    cout << "[1.입력/2.빼내기/3.출력/4.뒤로가기]" << endl;
                    cin >> mode;
                    switch (mode)
                    {
                    case 1:m->push();
                        break;
                    case 2:cout << "뒤부터 꺼냅니다." << endl;
                        m->pop();
                        break;
                    case 3:ms.print();
                        break;
                    case 4:break;
                    default:
                        break;
                    }
                }
                break;
            case 2://queue
                m = &mq;
                while (mode != 4)
                {    cout << "[Queue]에서무엇을 하시겠습니까?" << endl;
                    cout << "[1.입력/2.빼내기/3.출력/4.뒤로가기]" << endl;
                    cin >> mode;
                    switch (mode)
                    {case 1:m->push();
                        break;
                    case 2:cout << "앞부터 꺼냅니다." << endl;
                        m->pop();
                        break;
                    case 3:mq.print();
                        break;
                    case 4:break;
                    default:
                        break;
                    }
                }
                break;
            case 3:cout << "프로그램을 종료합니다." << endl;
                break;
            default:
                break;
            }
 
            
        }
    }
 
};
 
void main() {
 
    menu me;
    me.me();//메뉴 호출
 
 
}
 
 
 
 
 
cs
반응형

'Programming > C++' 카테고리의 다른 글

[c++]연산자 함수, 연산자 중복  (0) 2018.03.14
[c++]프렌드(friend)  (1) 2018.03.14
[c++]순수가상함수  (0) 2018.03.13
[c++]가상함수(virtual method)  (1) 2018.03.13
[c++]가상상속(virtual)  (1) 2018.03.13
댓글
공지사항