12.Basic - C++

3 minute read

12.Basic - C++




#include <iostream>
#include <iomanip>

// 30. Enum Datatype
enum Colours { red = 1, green = 2, blue = 3 };


// 31. Array of Structures
struct Employee {
    int emplno;
    float wage;
};
Employee emps[] = {
    {1,10.3},
    {2,15.2},
    {3,14.00}
};


// 32. The typedef storage class
typedef int RedCounter;


// 33. Pointer Arguments
inline void ErrorMessage(char* msg){
    std::cout << "Error : " << msg << '\n';
}


// 34. Pointer Arguments to Multiple Dimenssion array
void DisplayCalendar(int cal[][7]){
    std::cout << "Su Mo Tu We Th Fr Sa\n";
    for (int week=0; week <5 ; week++){
        for (int day=0; day<7; day++) {
            int dt = cal[week][day];
            if (dt) std::cout << std::setw(3) << dt; // setw로 3만큼 공간을 확보하고 출력
        }
            std::cout << "\n";
    }
}


// 35. Iterating with a Returned Pointer
int* GetDate(int wk, int dy){
    static int calendar2[5][7] = {
        {1,2,3,4,5,6,7},
        {8,9,10,11,12,13,14},
        {15,16,17,18,19,20,21},
        {22,23,24,25,26,27,28},
        {29,30,31}
    };
    return &calendar2[wk-1][dy-1];
};


void CallByValue(int value){
    value = 20;
    std::cout << "CallByValue, 값 = " << value << std::endl ;
    std::cout << "CallByValue, 주소 = "<< &value << std::endl;
}

void CallByAddress(int* address){
    *address = 20;
    std::cout << "CallByAddress, 주소안의 값 = " << *address << std::endl  ;
    std::cout << "CallByAddress,  주소 = "<< &address << std::endl;
}

void CallByReference(int& reference){
    reference = 20;
    std::cout << "CallByReference, 주소안의 값 = " << reference << std::endl  ;
    std::cout << "CallByReference,  주소 = "<< &reference << std::endl;

}


int main(int argc, const char * argv[]) {
    
    // 29. Anonymous Union
    
    union {
        int q_td = 64;
        int q_b;
    };
    int q_s = 40;
    std::cout << "Quantity to date = " << q_td <<"\n";
    std::cout << "Quantity to sold = " << q_s<<"\n";
    q_td -= q_s;
    std::cout << "Quantity to Balance = " << q_b<<"\n";
    
    
    // 30. Enum Datatype
    
    int cl = 1;
    std::cout << "1=red, 2=green, 3=blue. Select : " << cl << "\n" ;
    Colours col = static_cast<Colours>(cl);
    switch (col) {
        case red:
            std::cout << "red \n";
            break;
        default:
            break;
    }
    
    // 31. Array of Structures
    int i;
    for ( i=0; i<3; i++){
        std::cout << emps[i].emplno << ' '
        << emps[i].wage << "\n";
                   
    }
    
    
    // 32. The typedef storage class
    // 자료형에 별명을 붙히는 기능
    RedCounter rc = 1234;
    std::cout << rc << " records \n";
    
    
    // 33. Pointer Arguments
    char* ep = "invalid inpud";
    ErrorMessage(ep);
    
    char msg[] = "disk failure";
    ErrorMessage(msg);
    ErrorMessage("time out");
    
    // 34. Pointer Arguments to Multiple Dimenssion array
    static int calendar[5][7] = {
        {1,2,3,4,5,6,7},
        {8,9,10,11,12,13,14},
        {15,16,17,18,19,20,21},
        {22,23,24,25,26,27,28},
        {29,30,31}
    };
    DisplayCalendar(calendar);
    
    
    // 35. Iterating with a Returned Pointer
    
    int wk = 4,dy = 1;
    do{
        std::cout << "Week(1-5) Day(1-7) \n";
    } while (wk < 1 || wk > 6 || dy < 1 || dy > 7);
    int* date = GetDate(wk,dy);
    while(*date != 0) std::cout << *date++ << ' ';
    std::cout << "\n";
    std::cout << "\n";
    
    // 포인터 = int,char 와 같은 타입
    // & = address, 메모리 주소 반환
    // * = value , 메모리 안의 값 반환
    int *z; // 포인터 변수선언
    int az = 2; // 변수에 2할당
    z = &az; // 포인터변수에 az변수의 주소할당
    std::cout << "메모리주소 " << z << "\n"; // 포인터 변수 z안의 주소 반환
    std::cout << "메모리값 "<< *z << "\n"; // 포인터 변수 z안의 주소에 있는 값 반환
    
    *z = 4; // 포인터 변수 안의 값에 4를 할당
    std::cout << z << "\n"; // 포인터 변수 z안의 주소 반환
    std::cout << *z << "\n"; // 포인터 변수 z안의 주소에 있는 값 반환
    
    std::cout << "\n";
    
    
    
    
    
    
    int callnum = 10;
    std::cout << "call 전 callnum의 값 = " << callnum << std::endl;
    CallByValue(callnum);
    std::cout << "call 후 callnum의 값 = " << callnum << std::endl;
    std::cout << "callnum의 주소 = "<< &callnum << std::endl << '\n';
    
    
    int callnum2 = 10;
    std::cout << "call 전 callnum2의 값 = " << callnum << std::endl;
    CallByAddress(&callnum2);
    std::cout << "call 후 callnum2의 값 = " << callnum2 << std::endl;
    std::cout << "callnum2의 주소 = "<< &callnum2 << std::endl<< '\n';
    
    
    int callnum3 = 10;
    std::cout << "call 전 callnum의 값 = " << callnum3 << std::endl;
    CallByReference(callnum3);
    std::cout << "call 후 callnum3의 값 = " << callnum3 << std::endl;
    std::cout << "callnum3의 주소 = "<< &callnum3 << std::endl<< '\n';
    
    
    // call by address,reference는 값변경.
    
    
    
    
    
    
    
}







Leave a comment