본문 바로가기
개발개발/c++

C++ 오퍼레이터, assert

by 유잉유잉유잉 2024. 12. 23.
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

댓글