본문 바로가기
Language/C++ & openGL

C++ coding training function, array, class[c++ 코딩연습: 함수, 배열, 클래스, 프로토타입 헤더 분리]

by javapp 자바앱 2019. 1. 12.
728x90

문제(요구사항):

메시지를 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;

}

댓글