반응형
1. 연산자 오버로딩
- 연산자 오버로딩시 const를 사용하라!
- 연산자 오버로딩 방법 두 가지
1)멤버 함수 오버로딩
- 구현 : 멤버 함수로 연산자를 오버로딩
Point operator+(const Point& ref);
// 사용시 해석
pos.operator+(pos2);
2)전역 함수 오버로딩
- 구현 : 전역 함수로 구현하고 클래스 내에서 friend 정의
- 멤버 변수 접근 안되므로 getter 또는 friend 필요!
// 클래스 내부에서 정의
friend Point operator+(Point&, Point&);
// 클래스 밖에서 전역 함수 구현
Point operator+(Point& pos1, Point& pos2){}
// 사용시 해석
operator+(pos1, pos2);
무조건 전역 함수 오버로딩을 사용하는 경우
이항 연산의 왼쪽항이 오버로딩 객체가 아닐 때 사용
Point 객체에 상수 3을 곱할 경우
Point operator*(int, Point&);
//사용
Point pos2 = pos * 3;
- 객체를 cout 가능하게 하기
- ostream을 전역 함수 오버로딩 사용
ostream& operator<<(ostream& os, Point& pos){
os <<'('<< x << ',' << y << ')' << endl;
return os;
}
- 연산자 오버로딩 시 주의 사항
- Animal 클래스(부모) 에서 연산자 오버로딩
- Cat 클래스(자식)에서 연산자 오버로딩 안함
- 위의 상태에서 연산자 오버로딩 사용시 문제 발생 가능
if (Cat1 == Cat2)
// 서로 다른 객체 이지만 부모가 동일하여 True발생 가능함
// Cat에도 연산자 오버로딩을 작성해야 함!
2. 단항 연산자 오버로딩(++)
- 전위 증가
const Point& operator++(){
m_nX++;
m_nY++;
return *this;
}
++pos1;
- 후위 증가
const Point operator++(int){
const Point refPos(m_nX, m_nY);
m_nX += 1;
m_nY += 2;
return refPos;
}
pos1++;
3. 대입 연산자 오버로딩
- 이미 생성 및 초기화 되었으면 = 기호 사용시 대입 연산자 호출됨
- 대입 연산자 미구현 시 Defualt 대입 연산자 생성 및 호출
- 얕은 복사 진행
- 상속 시 부모 클래스의 대입연산자를 명시적으로 호출 필요
First::operator=(ref);
4. new, delete 오버로딩
- new 연산자 오버로딩
- new 연산자의 수행 범위 3가지
- 메모리 할당
- 생성자 호출
- 할당 자료형 변환
- 위 중 메모리 할당 역할만 오버로딩 가능
- new 연산자의 수행 범위 3가지
- new, delete 오버로딩 함수는 static 함수
- 일반 함수로 선언해도 static 함수로 간주
- 객체 생성 전 호출되어야되는 함수이기 때문
- 구현 방법
//new
void* operator new(size_t size) {...}
void* operator new[](size_t size()) {
void* adr = new char[size];
return adr;
}
//delete
void operator delete(void* adr)
void operator delete[](void* adr){
delete[] adr;
}
5. 포인터 연산자 오버로딩
- 포인터 연산자 오버로딩
Number& operator*(){
return *this;
- 지시 연산자 오버로딩
Number* operator->(){
return this;
}
6. 함수 호출 연산자 오버로딩
struct FuncObj{
int Add()(int a, int b) const{
return a + b;
}
}
int main(){
FuncObj add;
std::cout<<add(10,20);
}
7. 배열 인덱스 연산자 오버로딩
- 값 조회용 오버로딩
int operator[](int idx) const{
return arr[idx];
}
- 값 입력용 오버로딩
int& operator[](int idx) {
return add[idx];
}
8. 일반 변수 오버로딩
operator int(){
return x;
}
int main(){
Point pos(3,2);
int a = pos; // a는 3을 가짐
}
반응형
'C++ > C++' 카테고리의 다른 글
[C++]스마트 포인터 (0) | 2021.03.09 |
---|---|
[C++]LR value 및 최적화 (0) | 2021.03.09 |
[C++]빌드 프로세스 (0) | 2021.03.09 |
[C++]메모리 구조 (0) | 2021.03.09 |
[C++]기초 내용 정리 (0) | 2021.03.09 |