언어/C++

9. 연산자 오버로딩

에린_1 2023. 2. 2. 13:14
728x90
  • 함수가 오버로딩 되면, 오버로딩 된 수만큼 다양한 기능을 제공한다 - 이름은 하나지만 기능은 여러가지

 

  • 연산자 또한 가능하다

 

  • ‘operator’ 키워드와 ‘연산자’를 묶어서 함수의 이름을 정의하면, 함수의 이름을 이용한 함수의 호출뿐만 아니라, 연산자를 이용한 함수의 호출도 허용

 

  • 연산자를 오버로딩 하는 두 가지 방법
    1. 멤버함수에 의한 연산자 오버로딩
    2. 전역함수에 의한 연산자 오버로딩
      1. 동일한 자료형을 대상으로 +연산자를 전역함수 기반으로, 그리고 멤버함수 기반으로 동시에 오버로딩 할 경우, 멤버함수 기반으로 오버로딩 된 함수가 전역함수 기반으로 오버로딩 된 함수보다 우선시 되어 호출

 

 

  • 오버로딩이 불가능한 연산자의 종류
    • . - 멤버 접근연산자
    • .* - 멤버 포인터 연산자
    • :: - 범위 지정 연산자
    • ?: - 조건 연산자(3항 연산자)
    • sizeof - 바이트 단위 크기 계산
    • typeid - RTTI 관련 연산자
    • static_cast - 형변환 연산자
    • dynamic_cast - 형변환 연산자
    • const_cast - 형변환 연산자
    • reinterpret_cast - 형변환 연산자
  • 오버로딩을 제한하는 이유 C++의 문법규칙을 보존하기 위해서

 

 

 

  • 멤버함수 기반으로만 오버로딩이 가능한 연산자
    • = - 대입 연산자
    • () - 함수 호출 연산자
    • [] - 배열 접근 연산자(인덱스 연산자)
    • → - 멤버 접근을 위한 포인터 연산자
  • 이들은 객체를 대상으로 진행해야 의미가 통하는 연산자들이기에 , 멤버함수 기반으로만 연산자 오버로딩을 허용한다

 

 

  • 연산자 오버로딩 주의사항
    • 본래의 의도에 벗어난 형태의 연산자 오버로딩은 좋지 않다
    • 연산자의 우선순위와 결합성은 바뀌지 않는다
    • 매개변수의 디폴트 값 설정이 불가능하다
    • 연산자의 순수 기능까지 빼앗을 수는 없다
728x90

'언어 > C++' 카테고리의 다른 글

C & C++.1  (1) 2024.02.07
1. Introduction to the C++  (1) 2023.10.02
가상(Virtual)의 원리와 다중상속  (0) 2023.01.31
8. 상속과 다형성  (0) 2023.01.26
7. 상속(Inheritance)의 이해  (0) 2023.01.26