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
'C++ > C++ Programming With a Workbook' 카테고리의 다른 글
| [4일차] 1장 연습문제 / 2장 - C보다 나은 C++ Chapter . 1 ) 엄격한 형 검사 (0) | 2025.03.11 |
|---|---|
| [3일차] C++ 시작하기 - C와 C++ 의 공통점 / C++ 프로그램 개발 (0) | 2025.03.08 |
| [2일차] C++ 소개 - 다른 언어와의 차이점 / 첫 번째 C++ 프로그램 - C와 C++ 의 차이점 (0) | 2025.03.07 |
| [1일차] C++ 소개 - 특징 (0) | 2025.03.06 |
| [0일차] 공부를 들어가기에 앞서.. (0) | 2025.03.06 |