문제(요구사항):
메시지를 3개 정도 입력해서 연결이 된 상태(connect) 에서 play()로 메시지 출력 play(2) 해당 위치의 메시지
movePos 출력할 위치 옮기기, msgdelete() 해당 위치 메시지 제거 disconnect() 시 play()호출 하면 출력 불가 메시지
-제시된 main 함수는 기본적인 테스트 용 이므로, 메인 문 추가코드 작성
aam.h
#include <string>
using namespace std;
class AAM
{
string text;
public:
void connect();
void record();
int play();
int play(int n);
int getMsgNum();
void movePos(int n);
void msgdelete();
void disconnect();
};
aam.cpp
#include "aam.h"
#include <iostream>
using namespace std;
void connect()
{
}
void record()
{
}
int play()
{
}
int play(int n)
{
}
int getMsgNum()
{
}
void movePos(int n)
{
}
void msgdelete()
{
}
void disconnect()
{
}
main.cpp
#include <iostream>
#include "aam.h"
using namespace std;
int main()
{
AAM machine1;
machine1.connect(); //연결 t f
machine1.record(); //메시지 기록하기
machine1.play(); //출력하기
machine1.record();
machine1.record();
int c = machine1.getMsgNum(); //메시지 갯수
for(int i=0; i < c; i++) machine1.play(i); //줄줄이 플레이
machine1.movePos(1); //메시지 위치 이동
machine1.msgdelete(); //메시지 삭제
machine1.play(3); // 과제 검사의 편의성을 위해 추가한 부분
cout << "총 메시지의 개수는 " << machine1.getMsgNum() << "입니다." << endl;
machine1.disconnect(); //t f
machine1.play(); // “연결되지 않는 상태입니다.”라는 메시지 출력
machine1.connect(); //t f
cout << "총 메시지의 개수는 " << machine1.getMsgNum() << "입니다." << endl;
machine1.disconnect();
return 0;
}
작성 중 오류들
LNK1120, LNK2001
static int count; 를 지우니 해결..
count가 초기화 돼서 그런지 알았는데
알고보니 test객체가 record()가 호출될때마다 생성된다. 힙이 계속 새로 생성
메인에서 for(int i=0; i < c; i++) machine1.play(i); 으로 출력을 해도 새로운 힙에 저장된다.
해결: 생성자에서 배열 객체 생성!
결과
이런식으로 결과 나오면 성공
제가 작성한 코드
(코드는 참고용, 사람마다 다르시니)
aam.h
#pragma once
#include <string>
using namespace std;
class AAM
{
private:
bool inuse;
int i;
int count;
int msgCount;
string *text;
public:
AAM();
~AAM();
void connect();
void record();
void play();
void play(int n);
void setMsgNum(int i);
int getMsgNum();
int getMsgCount();
void movePos(int n);
void msgdelete();
void disconnect();
};
AAM.cpp
#include "aam.h"
#include <iostream>
using namespace std;
AAM::AAM()
{
text = new string[3];
inuse = false; i = 0; count = 0;
}
AAM::~AAM()
{
delete[] text;
}
void AAM::connect()
{
cout << "연결되었습니다.\n";
inuse = true;
}
void AAM :: record()
{
cout << "메시지 입력 : ";
cin >> text[getMsgNum()];
setMsgNum(count);
count++; msgCount++;
}
void AAM::play()
{
if (inuse == true) {
cout << " 출력 : ";
cout << text[getMsgNum()] << endl;
}else if (inuse == false)
cout << "연결되지 않는 상태입니다.\n";
}
void AAM::play(int n)
{
if (inuse == true) {
cout << " 출력 : ";
cout << text[n] << endl;
}
else if (inuse == false)
cout << "연결되지 않는 상태입니다.\n";
}
void AAM::setMsgNum(int i)
{
this->i = i;
}
int AAM::getMsgNum()
{
return i; //접근
}
int AAM::getMsgCount()
{
return msgCount;
}
void AAM::movePos(int n)
{
cout << n-1 <<"번째 메시지로 이동\n";
setMsgNum(n);
}
void AAM::msgdelete()
{
msgCount -= 1;
cout << "삭제 완료\n";
text[getMsgNum()] = "삭제된 메시지\n";
}
void AAM::disconnect()
{
cout << "연결을 끊습니다.\n";
inuse = false;
msgCount = 0;
}
main.cpp
#include <iostream>
#include "aam.h"
using namespace std;
int main()
{
AAM machine1;
machine1.connect(); //연결 t f
machine1.record(); //기록해서
machine1.play(); //출력
machine1.record();
machine1.record();
int c = machine1.getMsgNum(); //메시지 갯수
for (int i = 0; i < c; i++) machine1.play(i); //줄줄이 플레이
cout << "총 메시지의 개수는 " << machine1.getMsgCount() << "입니다." << endl;
cout << endl;
machine1.movePos(2); //메시지 위치 이동
machine1.msgdelete(); //메시지 삭제
machine1.play(2); // 과제 검사의 편의성을 위해 추가한 부분
for (int i = 0; i < c; i++) machine1.play(i); //줄줄이 플레이
cout << endl;
machine1.disconnect(); //t f
machine1.play(); // “연결되지 않는 상태입니다.”라는 메시지 출력
machine1.connect(); //t f
cout << "총 메시지의 개수는 " << machine1.getMsgCount() << "입니다." << endl;
machine1.disconnect();
return 0;
}
댓글