C++/C++ Programming With a Workbook

[5일차] C보다 나은 C++ Chapter . 1 ) bool 형 및 Reference 형

설탱 2025. 3. 12. 00:37

2. bool 형 ( C는 미제공이나 C++ 은 제공 )

 - 참(True) 또는 거짓(False)을 표현하기 위한 데이터형

 

* C 방식의 bool 형 표현

 - 0은 거짓(False), 0이 아닌 값은 참(True) 으로 간주한다.

 - True, False 를 표현하기 위한 데이터형이 없어 bool 값을 표현하기 위해 정수형을 사용한다.

  → typedef 문을 이용하여 int 형을 bool 형으로 정의해 사용

  → bool 형의 True, False 를 표현하기 위해 매크로 상수를 정의해 사용

    ex ) typedef int BOOL;

           #define TRUE 1

           #define FALSE 0

 

* C++ 방식의 bool 형 표현

 - 참(True), 거짓(False)을 표현하기 위한 기본 데이터형 제공한다.

 - 1바이트 크기의 데이터형 = 참, 거짓 값만 저장

 - True, False 키워드를 제공하기에 따로 정의할 필요가 없다.

 

 

3. Reference (레퍼런스) = " 참조 " 라고도 불림

 - C++ 에서 새롭게 추가된 데이터형

 - 특정 변수에 대해서 별명을 새로 만듦으로써 다른 이름으로 접근하는 것을 허용한다. ("다른 변수의 별명" 이라 보면 됨)

 

 1) Reference 선언

   - 레퍼런스 수식어 : &

     = Reference 를 선언할 때 사용한다.

     = 변수 앞에 & 를 사용하면? -> 주소 구하기 연산자

     = 변수를 선언할 때 & 를 사용하면? -> Reference 선언

                 

   - Reference가 어떤 변수의 별명인지 초기화하면서 지정한다.

   - Reference를 선언할 때 데이터형은 레퍼런스 변수가 참조하는 변수의 데이터형을 따라가야 한다.

     (구조체에 대한 레퍼런스 또한 동일)

      = 안 맞출 경우 컴파일 에러 발생

     ex ) int num ;   /   int &ref = num ;

 

   - Reference는 포인터 변수와 다르게 자신만의 주소를 따로 갖지 않는다.

     (포인터 변수는 다른 변수의 주소를 저장할 자신만의 메모리를 갖는다.)

   - Reference의 크기는 Reference가 참조하는 변수의 크기에 따라 결정된다.

 

   - Reference 사용 시 주의사항

     . 선언 시 반드시 초기화를 해야한다.

       = 어떤 변수의 별명인지를 초기화에서 지정하기 때문이다.

     . 상수의 별명이 될 수 없다. (상수는 Reference 초기화부터 불가능)

     . Reference 의 데이터형은 Reference 가 참조하는 변수의 데이터형과 일치해야 한다.

     . Reference가 참조하는 대상을 초기화 이후에 변경할 수 없다.

       = 즉, 한 번 선언된 레퍼런스는 소멸될 때 까지 같은 변수를 가리켜야 한다.

 

 

@ 테스트 예제 진행

#include <iostream>
using namespace std;

struct POINT
{
	int x;
	int y;
};

bool IsEqual(const POINT* p1, const POINT* p2);			// 함수 선언
// 두 점의 좌표가 같은지 판단하는 함수
// 두 점의 좌표가 POINT* 형으로 전달
// IsEqual 함수 안에서 인자인 두 점의 좌표가 변경되지 않으므로 const 사용

int main() {

	// bool
	POINT p1 = { 10, 10 };
	POINT p2 = { 20,20 };
	POINT p3 = p1;

	if (IsEqual(&p1, &p2)) {							// 함수 호출 1
		cout << "p1 과 p2 는 같습니다." << endl;
	}
	else {
		cout << "p1 과 p2 는 다릅니다." << endl;
	}

	if (IsEqual(&p1, &p3)) {							// 함수 호출 2
		cout << "p1 과 p3 는 같습니다." << endl;
	}
	else {
		cout << "p1 과 p3 는 다릅니다." << endl;
	}


	// 레퍼런스

	int num = 10;
	int& ref = num;			// 레퍼런스 초기화 - ref 는 num 의 별명

	cout << "num = " << num << endl;
	cout << "ref = " << ref << endl;

	//같은 변수를 부르는 서로 다른 이름

	num = 50;

	cout << "num = " << num << endl;
	cout << "ref = " << ref << endl;

	ref = 100;

	cout << "num = " << num << endl;
	cout << "ref = " << ref << endl;

	cout << "&num = " << &num << endl;		// num - 주소 출력
	cout << "&ref = " << &ref << endl;		// ref - 주소 출력

	// 레퍼런스와 레퍼런스가 참조하는 변수는 항상 같은 주소를 가진다 - 레퍼런스를 위한 메모리가 따로 할당되지 않는다.



	// 레퍼런스 크기 확인
	
	cout << "num 의 크기 : " << sizeof(num) << endl;
	cout << "ref 의 크기 : " << sizeof(num) << endl;

	cout << "char&	형의 크기 : " << sizeof(char&) << endl;
	cout << "short&	형의 크기 : " << sizeof(short&) << endl;
	cout << "int&	형의 크기 : " << sizeof(int&) << endl;
	cout << "double&	형의 크기 : " << sizeof(double&) << endl;

	// num 과 ref 크기가 같다. 서로 int 형이기 때문에 4바이트를 가진다.
	
	return 0;
}

bool IsEqual(const POINT* p1, const POINT* p2) {		// 함수 정의
	if ((p1->x == p2->x) && (p1->y == p2->y)) {
		return true;
	}
	return false;
}

 

 

https://github.com/SeolTea/CppStudy.git

 

GitHub - SeolTea/CppStudy

Contribute to SeolTea/CppStudy development by creating an account on GitHub.

github.com