노트
c++) 객체의 == 비교
tose33
2022. 12. 20. 21:28
자바에서 == 비교는 객체의 레퍼런스를 비교한다.
두 객체가 같은 값을 갖고 있어도 다른 레퍼런스를 갖으면 서로 다르고 == 비교 했을때 false이다.
예를들어 아래의 결과는 false 다.
Member member1 = new Member("member");
Member member2 = new Member("member");
System.out.println(member1 == member2);
java를 쓰다가 갑자기 c++에서 어땠는지 기억이 안났다;
그래서 직접해봤는데
아래 cpp 코드는 (member1 == member2) 부분에서 컴파일 에러가 난다.
#include <iostream>
#include <vector>
using namespace std;
class Member {
string name;
public:
Member(const string &name) : name(name) {}
};
int main(){
Member member1 = Member("m1");
Member member2 = Member("m1");
cout << (member1 == member2);
}
이게 기억이 잠깐 안났었는데 c++에서는 연산자 오버로딩이란게 있어서 Member 클래스에 == 오버로딩이 안되어 있기 때문에 == 에서 컴파일 에러가 난다.
== 로 비교를 하려면 해당 클래스에 == 연산자 오버로딩으로 정의가 되어있어야 한다.
또 자주 쓰는 컨테이너인 vector가 궁금해서 찾아봤는데 vector의 == 연산자 오버로딩은 값에 대해 비교한다.
즉 두 벡터가 크기가 같고, 같은 값들을 같은 순서로 갖고 있다면 == 연산시 true를 리턴한다.