-
명품 C++ 6장 8번C++ 2018. 11. 2. 18:18
8. 디버깅에 필요한 정보를 저장하는 Trace 클래스를 만들어보자. Trace 클래스를 활용하는 다음 프로그램과 결과를 참고하여 Trace 클래스를 작성하고 전체 프로그램을 완성하라. 디버깅 정보는 100개로 제한한다.
소스코드
#include <iostream>#include <string>using namespace std;class Trace {static string tag[100];static string debug[100];static int size;public:static void put(string t, string d);static void print(string t);};int Trace::size = 0;string Trace::tag[100];string Trace::debug[100];void Trace::put(string t, string d) {tag[size] = t;debug[size] = d;++size;}void Trace::print(string t = " ") {if (t == " ") {cout << "----- 모든 태그의 Trace 정보를 출력합니다. -----" << endl;for (int i = 0; i < size; ++i)cout << tag[i] << ":" << debug[i] << endl;}else {cout << "----- " << t << "태그의 Trace 정보를 출력합니다. -----" << endl;for (int i = 0; i < size; ++i) {if (tag[i] == "f()")cout << tag[i] << ":" << debug[i] << endl;}}}void f() {int a, b, c;cout << "두 개의 정수를 입력하세요>>";cin >> a >> b;Trace::put("f()", "정수를 입력 받았음"); // 디버깅 정보 저장c = a + b;Trace::put("f()", "합 계산"); // 디버깅 정보 저장cout << "합은 " << c << endl;}int main() {Trace::put("main()", "프로그램 시작합니다"); // 디버깅 정보 저장f();Trace::put("main()", "종료"); // put()의 첫 번째 매개 변수는 태그이고// 두 번째 매개변수는 디버깅 정보이다.Trace::print("f()"); // "f()" 태그를 가진 디버깅 정보를 모두 출력한다.Trace::print();}실행결과
static 변수는 외부에서 초기화 해주어야 합니다.
printf함수에서는 디폴트 매개변수를 사용하여 모든 것을 출력할지 특정 태그만 출력할지 구분했습니다.
'C++' 카테고리의 다른 글
명품 C++ 6장 Open Challenge (0) 2018.11.02 명품 C++ 6장 9번 (0) 2018.11.02 명품 C++ 6장 7번 (0) 2018.11.02 명품 C++ 6장 6번 (0) 2018.11.02 명품 C++ 6장 5번 (0) 2018.11.02