C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[985] 심심할때 구현하는 구조체 클래스 비교.
김태선 [cppbuilder] 11842 읽음    2010-05-16 12:02
//---------------------------------------------------------------------------

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 식으로 비교하면 곤란한 문제가 생기니,
스트링 대 스트링 비교 등 보다 정미한 비교를 해야 합니다.

너무 상식적인 내용을 중언부언하는 것 같군요.

+ -

관련 글 리스트
985 심심할때 구현하는 구조체 클래스 비교. 김태선 11842 2010/05/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.