민인학 님이 쓰신 글 :
: struct port_info {
: AnsiString PortName; // char *
: AnsiString PortWidth; // int
: AnsiString PortDir; // int
: AnsiString PortType; // int
friend bool operator==(port_info& x, port_info& y);
: };
연산자 겹지정(operator overloading)은 멤버함수보다는
일반함수를 friend로 선언하여 정의하는 것이 더 편리합니다.
bool operator==(port_info& x, port_info& y)
{
return x.PortName == y.PortName
&& x.PortWidth == y.PortWidth
&& x.PortDir == y.PortDir
&& x.PortType == y.PortType;
}
: struct import_file_info {
: AnsiString EdifFile; // char *
: AnsiString InstanceName; // char *
: AnsiString EmulationMode; // int
: AnsiString Type; // int
:
: AnsiString CmdFifoSize; // int
: AnsiString ReadFifoSize; // int
: AnsiString WriteFifoSize; // int
: AnsiString SlaveReadFifoSize; // int
: AnsiString SlaveWriteFifoSize; // int
:
: AnsiString UseClockType; // int
: AnsiString ClockPortName; // char *
:
: AnsiString TotalPortCount; // int // 포트의 갯수
:
: vector<port_info> PortInfo; // 포트 정보
friend bool operator==(import_file_info& x, import_file_info& y);
: };
bool operator==(import_file_info& x, import_file_info& y)
{
return x.EdifFile == y.EdifFile
&& x.InstanceName == y.InstanceName
... // 중간 생략
&& x.PortInfo == y.PortInfo;
}
이렇게 하면 되지 않나요?
: vector<import_file_info> a, b;
:
: if(a==b) {
: }
:
:
: 이런경우는 operator를 어떻게 작성해 줘야 하죠?...
: 가르쳐 주신대로 했는데 안돼네요... 아이고...
: 아.. 정말 죄송합니다... 흑흑.....
: 제가 언제 한번 술 살께요.. ^^
:
:
: 김백일 님이 쓰신 글 :
: : 민인학 님이 쓰신 글 :
: : : 답변 정말 감사드립니다..
: : : 그런데요.. 궁금한게 있는데요..
: : : int대신에 AnsiString은 안돼나요?
: : :
: : : struct test_type {
: : : int a;
: : : int b;
: : : test_type(int a1, int b1): a(a1), b(b1) {} // 편의를 위해 만든 생성자
: : : friend operator==(test_type& x, test_type y); // operator==()가 꼭 정의되어 있어야 합니다.
: : : }; // 이렇게 해야 합니다.
: : :
: : :
: : :
: : : 김백일 님이 쓰신 글 :
: : : : vector<T>::operator==()를 쓰기 위해서는
: : : : T::operator==() 가 정의되어 있어야 합니다.
: : : : 이 부분을 맞게 수정했습니다.
: : : : 다시 한번 읽어 보세요.
: : : :
http://www.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=19440
: : : :
: : : : 민인학 님이 쓰신 글 :
: : : : : 예로
: : : : :
: : : : : struct {
: : : : : int a;
: : : : : int b;
: : : : : } test1;
: : : : :
: : : : : struct {
: : : : : int a;
: : : : : int b;
: : : : : } test2;
: : : : :
: : : : : vector<test1> a;
: : : : : vector<test2> b;
: : : : :
: : : : : if(a!=b) {
: : : : : ShowMessage("값이 변경 되었습니다.");
: : : : : } else {
: : : : : ShowMessage("변경이 되지 않았군요..");
: : : : : }
: : : : :
: : : : : 이런식으로 비교를 할수 있나요?
: : : : : 전에도 이런질문을 올렸었지만... 확실한 답을 얻지 못했습니다..
: : : : : 꼭좀 부탁드립니다... 어떻게 해야 하는지 예제좀 부탁드립니다..
: : : : : 안녕히 계세요.
: : : : :
: : : : : 아래의 링크는 전에 올렸던 질문인데.. 답변을 주신분들입니다..
: : : : : 아래의 답변을 보시고... 답변을 주셨으면 좋겠습니다..
: : : : : 정말 여러분들께.. 미안할 따름입니다..
: : : : : 제가 너무 급해서요.. ^^
: : : : :
: : : : :
http://www.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=19439
: : : : :