C++

[C++] 명품 C++ 프로그래밍 실습문제 6장 8번

Hs’s Coding vlog 2023. 1. 10. 17:45

[C++]명품 C++ 프로그래밍 실습문제 6장 8번

[C++]명품 C++ programming 실습문제 6장 8번

#include <iostream>
#include <string>
using namespace std;

void f();

class Trace{
    static string *s1;//tag 정보 저장 //static 선언하면 전역공간에서 구현을 간략히 해줘야 풀수가 있음
    static string *s2;//내용 정보 저장
    static int num;
    public:
  
    static void put(string tag, string imformation){
      
        s1[num] = tag;
        s2[num] = imformation;
        num++;
    }
    static void print(string tag){
        if( tag == "f()" ){
            cout << "-----f() 태그의 Trace 정보를 출력합니다-----" << endl;
            for(int k=0; k<num; k++){
                cout << s1[k] << ": " <<s2[k] <<endl;
            }
        }

        return ;  
    }
    static void print(){

        cout << "-----모든 trace 정보를 출력합니다.-------" << endl;
        for(int k=0; k<num; k++){
            cout << s1[k] << ": " <<s2[k] <<endl;
        }
        
            
    }
};
string *Trace::s1 = new string [100];//tag 정보 저장 이코드의 의미 :포인터변수에 새로운 STRING공간 100칸을 할당을 하는 코드이다.
string *Trace::s2 = new string [100];//내용 정보 저장 이코드의 의미 :포인터변수에 새로운 STRING공간 100칸을 할당을 하는 코드이다.
int Trace::num=0;
//위의 3줄의 코드처럼 STATIC을 클래스에서 쓴경우라면 클래스 외부에서 따로 구현을 해줘야 그 STATC MEM들을 
//쓸수가 있다.

int main(){
    Trace::put("main()","프로그램을 시작합니다");
    f();
    Trace::put("main()","종료");
    Trace::print("f()"); // 태그를 가진 디버깅 정보를 출력한다
    Trace::print();
    return 0;
}

void f(){
    int a,b,c;
    cout << "두개의 정수를 입력을하세요>>";
    cin >> a >> b;
    Trace::put("f()","정수를 입력을 받았음"); //클래스 Trace의 함수를 쓸려면 클래스명::함수를 쓰면 접근이 가능하다.
    c=a+b;
    Trace::put("f()","합을 계산");
    cout << "합은 " << c << endl;
}

 

명품 C++ 프로그래밍실습문제/연습문제 /C++