//---------------------------------------------------------------------------
struct T
{
int Data;
bool operator ==(T& t)
{
return !memcmp(this, &t, sizeof(T));
}
bool operator !=(T& t)
{
return memcmp(this, &t, sizeof(T));
}
};
void __fastcall TForm1::Button3Click(TObject *Sender)
{
T a;
T b;
a.Data = 1;
b.Data = 1;
if (a == b)
Caption = "같아";
else
Caption = "달라";
}
//---------------------------------------------------------------------------
그냥 구조체나 클래스를 직접 == 또는 != 연산자로 비교하면 좋겠지만,
C++에서는 기본 자료형 외는 이게 안됩니다.
그건 프로그래머 몫으로 남겨진 탓이죠.
C++에서 구조체나 클래스의 내용 비교 구현은 매우 손쉽습니다.
위에 예제처럼요.
위 예는 그냥 구조체 비교입니다.
클래스의 경우라면
보다 핵심적인 데이타만 비교하는 식으로 하는게 낫겠죠.
가상 메소드가 있는 경우는 위처럼 하면 안되고,
데이타 부분만 비교하도록 해야 합니다.
또한 char Data[size];
식의 데이타가 있는 구조체나 클래스라면
단순 무식한 memcmp 식으로 비교하면 곤란한 문제가 생기니,
스트링 대 스트링 비교 등 보다 정미한 비교를 해야 합니다.
너무 상식적인 내용을 중언부언하는 것 같군요.
|