참조자는 변수의 별명이라고 생각하면 된다.

변수는 할당한 메모리 공간에 대한 이름이다. 그 공간에 이름을 하나 더 붙여주는 것이 참조자이다.


int val = 10;

int &ref = val; //참조자는 선언과 동시에 변수로 초기화 되어야 함.


 위와 같이 선언하면 해당 메모리에 10이라는 값이 저장되어 있고 그 공간의 이름은 val, ref 이렇게 두 개가 된다.

따라서,


cout << val << endl;

cout << ref << endl;


위와 같이 출력했을 때 둘 다 10 출력 된다.


#include <iostream>

using namespace std;


void Swap_Ref(int &a, int &b) //매개변수는 함수가 호출되어야 초기화가 진행되는 변수들이다.

{

int temp = a;

a=b;

b=temp;

}



int main(void)

{

int value1 = 100;

int value2 = 200;

Swap_Ref(value1, value2);


cout << value1 << endl;

cout << value2 << endl;

return 0;

}



응용 : 포인터 변수를 인자로 주었을 때 Swap() 함수

#include <iostream>

using namespace std;


void Swap(int* &a, int* &b)

{

int *temp = a;

a = b;

b = temp;


}


int main(void)

{

int a=10, b=20;

int *ptr1=&a;

int *ptr2=&b;


cout << ptr1 << " [before] " << ptr2 << endl;

cout << *ptr1 << " [before] " << *ptr2 << endl;

Swap(ptr1, ptr2);

cout << ptr1 << " [after] " << ptr2 << endl;

cout << *ptr1 << " [after] " << *ptr2 << endl;

return 0;



-----Menu-----

1.계좌개설

2.입 금

3.출 금

4.잔액조회

5.모든계좌 정보 출력

6.프로그램 종료 


위와 같은 메뉴에 대해 동작하는 프로그램입니다.


cpp 파일로 작성되었습니다.

그러나 C 스타일로 구현되었기 때문에 구조체가 사용되었고 입출력 정도만 C++이 사용되었습니다.


#include <iostream>

#include <cstring>

using namespace std;

const int accSize = 10;//최대 계좌수

const int adminPassword = 0000;//관리자 암호 설정


void Menu(void);//메뉴 출력

void MakeAccount(void);//계좌개설

void Deposit(void);//입금

void Withdraw(void);//출금

void Balance(void);//잔액조회

void allBalance(void);//모든계좌 정보조회


typedef struct

{

int accID;

char name[20];

int balance;

} Account;


Account accSave[accSize];

int accNum=0;


int main(void)

{

int select;


while(1)

{

Menu();

cout<<"선택 : ";

cin>>select;

cout<<endl;


switch(select)

{

case 1:

MakeAccount();

break;

case 2:

Deposit();

break;

case 3:

Withdraw();

break;

case 4:

Balance();

break;

case 5:

allBalance();

break;

case 6:

return 0;

default:

cout << "올바른 선택이 아닙니다." << endl;

}

}

return 0;

}


void Menu(void)

{

cout<<"-----Menu-----"<<endl;

cout<<"1.계좌개설"<<endl;

cout<<"2.입 금"<<endl;

cout<<"3.출 금"<<endl;

cout<<"4.잔액조회"<<endl;

cout<<"5.모든계좌 정보 출력"<<endl;

cout<<"6.프로그램 종료"<<endl;

}


void MakeAccount(void)

{

int id;

char name[20];

int money;


cout<<"[계좌개설]"<<endl;

cout<<"계좌ID : "; cin>>id;

cout<<"이 름 : "; cin>>name;

cout<<"입금액 : "; cin>>money;

cout<<endl;


accSave[accNum].accID = id;

strcpy(accSave[accNum].name, name);

accSave[accNum].balance = money;

accNum++;

}


void Deposit(void)

{

int id;

int money;


cout<<"[입  금]"<<endl;

cout<<"계좌ID : "; cin>>id;

cout<<"입금액 : "; cin>>money;

for(int i=0; i<accNum; i++)

{

if(accSave[i].accID == id)

{

accSave[i].balance += money;

cout<<"입금완료"<<endl;

return;

}

}

cout<<"잘못된 ID 입니다!"<<endl<<endl;

}


void Withdraw(void)

{

int id;

int money;


cout<<"[출  금]"<<endl;

cout<<"계좌ID : "; cin>>id;

cout<<"출금액 : "; cin>>money;

for(int i=0; i<accNum; i++)

{

if(accSave[i].accID == id)

{

if(accSave[i].balance < money)

{

cout<<"잔액이 부족합니다."<<endl;

return;

}

accSave[i].balance -= money;

cout<<"출금완료"<<endl;

return;

}

}

cout<<"잘못된 ID 입니다!"<<endl<<endl;

}


void Balance(void)

{

int id;


cout<<"[잔액조회]"<<endl;

cout<<"계좌ID : "; cin>>id;

for(int i=0; i<accNum; i++)

{

if(accSave[i].accID == id)

{

cout<< "ID : " << accSave[i].accID<<endl;

cout<< "이름 : "<<accSave[i].name<<endl;

cout<< "잔액 : "<<accSave[i].balance<<endl<<endl;

return;

}

}

cout<<"잘못된 ID 입니다!"<<endl<<endl;

}


void allBalance(void)

{


int confirm_password;

cout<<"[관리자 모드]"<<endl;

cout<<"Input the admin password : "; cin>>confirm_password;

if(accNum==0)

{

cout<<"Bank has no account..."<<endl<<endl;

return;

}

if(confirm_password == adminPassword)

{

for(int i=0; i<accNum; i++)

{

cout<< "ID : " << accSave[i].accID<<endl;

cout<< "이름 : "<<accSave[i].name<<endl;

cout<< "잔액 : "<<accSave[i].balance<<endl<<endl;

}

}

else

{

cout<<"You are not admin!!!"<<endl<<endl;

return;

}


}


'프로그래밍 > C++' 카테고리의 다른 글

new & delete 기본 사용법  (0) 2013.07.23
포인터와 참조자  (0) 2013.07.23
참조자(Reference)를 이용한 Swap() 함수  (0) 2013.07.23
범위지정 연산자 (Scope Resolution Operator)  (0) 2013.07.20
이름공간(namespace) 기본형  (0) 2013.07.20
입력 받은 수의 구구단 출력  (0) 2013.07.19
포인터  (0) 2013.06.01

범위지정 연산자 (Scope Resolution Operator) 사용 예제


#include <iostream>

using namespace std;


int value=100; //전역변수


void test(void)

{

int value=200; //지역변수

value+=100;

cout << "지역변수 value : " << value << endl;

::value+=100; //범위지정 연산자 (Scope Resolution Operator) :: 사용

cout << "전역변수 value : " << ::value << endl;


}


int main(void)

{

test();

return 0;


Scope 연산자를 이용하여 전역변수에 접근하는 예제입니다.

'프로그래밍 > C++' 카테고리의 다른 글

포인터와 참조자  (0) 2013.07.23
참조자(Reference)를 이용한 Swap() 함수  (0) 2013.07.23
간단한 은행계좌 관리 프로그램  (0) 2013.07.21
이름공간(namespace) 기본형  (0) 2013.07.20
입력 받은 수의 구구단 출력  (0) 2013.07.19
포인터  (0) 2013.06.01
Swap 함수  (0) 2013.03.30

+ Recent posts