12.Basic - C++
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