개발개발/c++
C++ 오퍼레이터, assert
유잉유잉유잉
2024. 12. 23. 23:47
728x90
▶️ 오퍼레이터
연산자 재정의 기능 입니다.
+, - 같은 연산자의 기본 기능을 재정의하여 해당 구조체 혹은 클래스의 고유한 연산 기능을 만들때 사용합니다.
기존 +, - 등의 연산자도 함수입니다.
struct FPoint
{
int x = 0;
int y = 0;
// FPoint의 + 연산자 재정의
FPoint operator + (const FPoint& pt) const
{
FPoint result;
// x는 이 함수를 호출한 객체의 x이다.
result.x = x + pt.x;
result.y = y + pt.y;
return result;
}
// FPoint의 + 연산자 재정의
FPoint operator + ( int num ) const
{
FPoint result;
result.x = x + num;
result.y = y + num;
return result;
}
// 랜덤엑세스([]) 연산자 재정의
int operator [] (int idx)
{
int result = idx == 0 ? x : y;
return result;
}
void Print()
{
std::cout << "x : " << x << ", y : " << y << std::endl;
}
};
int main()
{
FPoint pt1;
pt1.x = 10;
pt1.y = 2;
FPoint pt2;
pt2.x = 1;
pt2.y = 3;
//FPoint pt3 = pt1 + pt2;
FPoint pt3 = pt1.operator+(pt2);
pt3.Print();
FPoint pt4 = pt1 + 1;
pt4.Print();
std::cout << pt[0] << std::endl;
}
FPoint pt3 = pt1 + pt2; 는
FPoint pt3 = pt1.operator+(pt2);로도 변경할 수 있습니다.
FPoint pt4 = pt1 + 1; 에서
FPoint pt4 = 1 + pt1;로 바꾼다면 에러가 납니다. 1이란 정수의 +는 pt1을 더할 수 있게 재정의된 함수가 없기 때문입니다.
▶️ 인자가 없는 operator 선언
struct FPoint
{
int x = 0;
int y = 0;
// 인자를 넣어줄 경우 곱하기 연산이 되고
// 없을 경우 역참조가 된다.
int operator * ()
{
return x;
}
}
int main()
{
FPoint pt1;
pt1.x = 10;
std::cout << *pt1 << std::endl;// 10 출력
return 0;
}
▶️ assert()
- 디버깅시 작성한 조건이 에러가 날 경우 에러난 위치와 에러를 반환해주는 함수입니다.
- 디버깅모드에서만 실행됩니다.
#include <assert.h>
int main()
{
int a = 1;
// 해당 조건이 false가 될 경우, 디버깅시 사용자에게 알려준다.
assert( a == 0 );
}
에러가 났을 때 알림창에서 '다시 시도' 버튼을 누를 경우 중단점 명령이 실행된 곳으로 이동됩니다.
728x90