1. 문제
7. 아래와 같은 BaseMemory 클래스를 상속받는 ROM( Read Only Memory ), RAM 클래스를 작성하라. BaseMemory 에 필요한 코드를 수정 추가하여 적절히 완성하라.
ROM은 읽기 전용 메모리이므로 작동 중에 값을 쓸 수가 없기 때문에, 공장에서 생산할 때 생산자가 요청한 데이터로 초기화하는데 이 작업을 굽는다( burn )라고 한다. 그러므로 ROM은 반드시 생성자에서 burn 작업이 일어나야 한다.
다음은 ROM과 RAM 메모리를 생성하고 사용하는 사례이다. ROM의 0번지에서 4번지까지 읽어 RAM 메모리의 0~4번지에 쓰고, 다시 RAM 메모리의 값을 화면에 출력한다. 전체 프로그램을 완성하라.
2. 결과
3. 코드
#include <iostream>
using namespace std;
class BaseMemory {
char *mem;
protected:
BaseMemory(int size) { mem = new char [size]; }
~BaseMemory() { delete [] mem; }
void setData(int index, char data) { mem[index] = data; }
char getData(int index) { return mem[index]; }
};
class ROM : private BaseMemory {
int length;
public :
ROM( int size, char memory[], int len) : BaseMemory(size) {
length = len;
for(int i=0; i< len; i++)
setData( i, memory[i] );
}
char read(int index) { return getData(index); }
};
class RAM : private BaseMemory {
public :
RAM(int size) : BaseMemory(size) {;}
void write(int index, int data) { setData( index, data); }
char read(int index) { return getData(index); }
};
int main() {
char x[5] = {'h', 'e', 'l', 'l', 'o'};
ROM biosROM(1024*10, x, 5);
RAM mainMemory( 1024*1024 );
for(int i=0; i<5; i++) mainMemory.write(i, biosROM.read(i) );
for(int i=0; i<5; i++) cout << mainMemory.read(i);
}
4. 설명
ROM은 읽기 전용 메모리로서 매개변수로 입력받은 char형 배열을 메모리 (배열)의 저장하도록 합니다.
RAM 클래스 멤버는 생성자에서 size를 입력받고, 크기가 size인 배열을 동적으로 생성하도록 합니다.
main함수에서 보면 RAM 클래스 변수 mainMemory의 write 멤버 함수를 이용하여서 동적으로 생성했었던 배열의 해당하는 주소의 값을 저장합니다.
그 후 read 멤버함수로 출력을 해보면 hello가 출력되는 것을 알 수가 있습니다.
'명품 C++ programming' 카테고리의 다른 글
명품 C++ programming 실습문제 8장 9번 (0) | 2019.04.29 |
---|---|
명품 C++ programming 실습문제 8장 8번 (0) | 2019.04.28 |
명품 C++ programming 실습문제 8장 6번 (0) | 2019.04.28 |
명품 C++ programming 실습문제 8장 5번 (0) | 2019.04.28 |
명품 C++ programming 실습문제 8장 4번 (1) | 2019.04.22 |