SlideShare ist ein Scribd-Unternehmen logo
1 von 11
연산자 오버로딩 
+α (const, C++스타일 형변환, 스마트 포인터) 
작성자: 박수빈
목차 
 연산자 오버로딩이 필요한 이유 
 연산자 오버로딩 방법 
① 멤버 함수를 사용한 연산자 오버로딩 
• 피연산자가 한 개인 경우와 두 개인 경우 
② 일반 함수를 사용한 연산자 오버로딩 
③ 적절한 const, inline, & 등의 사용 
 연산자 오버로딩의 규칙 및 주의사항 
 + α 
① const 
② C++ 스타일의 형변환 
③ 스마트 포인터
연산자 오버로딩이 필요한 이유 
 핵심: 클래스 타입을 기본 타입처럼 다룰 수 있게 한다. 
(클래스만 가능한 것은 아니고, 구조체도 물론 가능하다.) 
 예) 
• 연산자 오버로딩의 아주 기본적인 형 
태이다. 
• operator+, operator!= 등 오버로딩 할 
연산자를 이름으로 하는 함수를 정의 
하면 된다. 
• 위 결과처럼 26줄과 27줄은 동일한 작 
동을 한다. 즉, 같은 의미이다. 
• 이처럼 연산자 오버로딩을 통해, 기존 
의 산술 연산, 논리 연산 등을 구조체 
나 클래스 자료형에서도 이용하게 할 
수 있다.
연산자 오버로딩 방법 
 1. 멤버 함수를 사용한 연산자 오버로딩 
• 클래스의 경우 멤버 변수들이 보통 private 
로 선언되는데, 멤버 함수로 연산자 오버로 
딩을 할 경우 이에 접근하여 연산이 가능하 
다.
연산자 오버로딩 방법 
 ++, -- 연산자의 경우 전치 연산, 후치 연산을 둘 다 정의해야 한 
다. 
• 복소수 같은 타입을 클래스로 정의할 경우, 
++연산 같은 것이 필요할 것인데, 이러한 
연산은 전치 연산과 후치 연산을 둘 다 만 
들어야 한다.
연산자 오버로딩 방법 
 2. 일반 함수를 사용한 연산자 오버로딩 
• << 연산자처럼 양쪽의 피연산자가 
서로 다른 객체일 경우 멤버 함수로 
는 연산자 오버로딩이 불가능 하다. 
• 따라서 전역 함수로 선언하고 두 피 
연산자를 모두 파라미터로 받아 구 
현하는데, 해당 객체의 private데이 
터에 접근하기 위해 friend 선언을 
해주어야 한다.
연산자 오버로딩 방법 
 3. 적절한 const, inline, & 등의 사용 
• 앞에서는 이해가 쉽도록 단순한 형태 
로 선언했지만, 실제로 연산자 오버로 
딩을 할 때에는 안전성과 속도의 최적 
화를 위해 inline, const, 참조자 등을 사 
용한다. 
• 기본적으로 파라미터는 불필요한 자료 
의 복사를 막기 위해 (const Point& p) 
이런 식으로 쓰며, 
• 대입 연산이 들어가는 +=,-=,*=,/= 등을 
제외하고는 함수자체를 상수화 하기 
위해 함수선언 뒤에 const를 붙여준다. 
• 또한 대입 연산은 자신을 다시 반환하 
는 것이기 때문에, 불필요한 복사를 막 
기 위해 &를 붙여준다.
연산자 오버로딩의 규칙 및 주의사 
항 
• 기존 연산 방법을 바꿀 수는 없다. 
 피연산자 중 적어도 하나는 객 
체여야 한다. 
• 기존 연산자의 의미를 해치지 않 
도록 주의해야 한다. 
표 출처: 뇌를 자극하는 C++ 프로그래밍
+ α 
 1. const 
• 값이 바뀔 이유가 없는 변수들에는 웬만하면 const를 붙여주는 것이 좋다. 
• const는 속도 향상, 메모리 최적화에도 도움이 되는 경우가 있다. 
• 역시 가장 큰 이유는 안정성에 매우 큰 도움이 되기 때문. 
• const 사용법 
• 포인터가 가리키는 대상 상수화 : const temp *ptr 
temp const *ptr 
• 포인터 변수를 상수화 : temp * const ptr 
• 둘 다 상수화 : const temp * const ptr 
• 함수 반환값 상수화: const int Function() { ... } 
• 멤버 함수 상수화 : void Function(int pram) const { ... } 
 상수 객체에 대해 호출될 함수임을 뜻하는 것. 
• 변경 불가능한 객체를 가리키는 반복자(Iterator)가 필요할 때는 const_iterator를 사 
용
+ α 
 2. C++ 스타일 형변환 
• C++은 총 4가지 형변환을 지원함 
• 기존 C의 캐스팅 방식은 문제가 많음 
(괄호가 많을 경우 알아보기 힘들고, 안전장치가 아무것도 안 되어 있음) 
• 따라서 가능하면 C++ 스타일의 캐스팅을 이용하는 게 좋다. 
• 상속 계층 구조를 이동할 때는 dynamic_cast 이용 
(그러나 안정성이 향상되는 대신 속도가 저하되는 단점이 있어, 성능이 중요한 경우 static_cast 
이용) 
• const 속성이나 volatile 속성을 제거할 때는 const_cast 이용 
• 이외에 대부분의 경우 static_cast 이용 
• 나머지 하나인 reinterpret_cast는 일반적으로 허용하지 않는 위험한 형변환을 할 때 
사용되며(포인터를 정수로 변환하는 등), 거의 사용할 일이 없다.
+ α 
 3. 스마트 포인터 
• 포인터에 자동소멸 기능 등을 추가하기 위해 클래스화 시킨 것으로, 기본적으로 소 
멸자를 통해 가리키는 객체를 delete시키며, 기존의 포인터와 동일하게 쓰기 위해 . 
과 ->에 대한 연산자 오버로딩이 되어있다. 
• 개인적으로도 스마트 포인터를 구현하여 사용할 수 있지만, C++11에서 매우 유용 
하게 구현된 3가지 스마트 포인터가 있기 때문에 이것을 쓰는 것이 좋다. 
• unique_ptr 는 말 그대로 하나밖에 존재하지 않는 포인터로, 동시에 여러 포인터가 
같은 데이터를 가리킬 수 없도록 구현되어 있다. (크기: 4바이트) 
• shared_ptr 는 참조 카운팅을 내재하여 여러 포인터가 같은 데이터를 가리킬 수 있 
도록 하고, 가리키는 포인터가 전부 사라지면 메모리를 해제할 수 있도록 구현되어 
있다. (크기: 8바이트) 
• weak_ptr 는 shared_ptr 의 순환참조 문제를 방지하기 위해 참조 카운트를 증가시키 
지 않고 참조할 수 있도록 하는 shared_ptr 의 부가 서비스 격이다.

Weitere ähnliche Inhalte

Was ist angesagt?

More effective c++ 3
More effective c++ 3More effective c++ 3
More effective c++ 3
현찬 양
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)
익성 조
 
More effective c++ 1
More effective c++ 1More effective c++ 1
More effective c++ 1
현찬 양
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4
현찬 양
 
Effective c++ 1
Effective c++ 1Effective c++ 1
Effective c++ 1
현찬 양
 
Effective c++ 2
Effective c++ 2Effective c++ 2
Effective c++ 2
현찬 양
 

Was ist angesagt? (20)

Effective c++ item27
Effective c++ item27Effective c++ item27
Effective c++ item27
 
More effective c++ 3
More effective c++ 3More effective c++ 3
More effective c++ 3
 
모어이펙티브 C++ 3,4장 예외, 효율 스터디
모어이펙티브 C++ 3,4장 예외, 효율 스터디모어이펙티브 C++ 3,4장 예외, 효율 스터디
모어이펙티브 C++ 3,4장 예외, 효율 스터디
 
Std bind
Std bindStd bind
Std bind
 
Effective cpp
Effective cppEffective cpp
Effective cpp
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)
 
More effective c++ 1
More effective c++ 1More effective c++ 1
More effective c++ 1
 
Cpp에서 활용해보는 Lambda식
Cpp에서 활용해보는 Lambda식Cpp에서 활용해보는 Lambda식
Cpp에서 활용해보는 Lambda식
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4
 
Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본
 
Mec 56
Mec 56Mec 56
Mec 56
 
5 6 1
5 6 15 6 1
5 6 1
 
Effective c++ 1
Effective c++ 1Effective c++ 1
Effective c++ 1
 
C++ Template/STL study
C++ Template/STL studyC++ Template/STL study
C++ Template/STL study
 
모어이펙티브 C++ 5,6
모어이펙티브 C++ 5,6모어이펙티브 C++ 5,6
모어이펙티브 C++ 5,6
 
Effective c++ 2
Effective c++ 2Effective c++ 2
Effective c++ 2
 
effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리
 
Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수
 
Effective c++ 1,2
Effective c++ 1,2Effective c++ 1,2
Effective c++ 1,2
 
호이스팅, 클로저, IIFE
호이스팅, 클로저, IIFE호이스팅, 클로저, IIFE
호이스팅, 클로저, IIFE
 

Andere mochten auch

기말과제 포스트모템 141033_박수빈1
기말과제 포스트모템 141033_박수빈1기말과제 포스트모템 141033_박수빈1
기말과제 포스트모템 141033_박수빈1
수빈 박
 
บริการต่างๆบนอินเทอร์เน็ต
บริการต่างๆบนอินเทอร์เน็ตบริการต่างๆบนอินเทอร์เน็ต
บริการต่างๆบนอินเทอร์เน็ต
Yaithes
 
Lullabies for little criminals
Lullabies for little criminalsLullabies for little criminals
Lullabies for little criminals
Krista Plishka
 

Andere mochten auch (15)

Week 2 Exploration: Storyboard
Week 2 Exploration: StoryboardWeek 2 Exploration: Storyboard
Week 2 Exploration: Storyboard
 
Final PPP Slide Show
Final PPP Slide ShowFinal PPP Slide Show
Final PPP Slide Show
 
Elder abuse law for Elders
Elder abuse law for EldersElder abuse law for Elders
Elder abuse law for Elders
 
Final PPP Slide Show
Final PPP Slide ShowFinal PPP Slide Show
Final PPP Slide Show
 
CONCEPT DOCUMENT
CONCEPT DOCUMENTCONCEPT DOCUMENT
CONCEPT DOCUMENT
 
01b01 01
01b01 0101b01 01
01b01 01
 
기말과제 포스트모템 141033_박수빈1
기말과제 포스트모템 141033_박수빈1기말과제 포스트모템 141033_박수빈1
기말과제 포스트모템 141033_박수빈1
 
บริการต่างๆบนอินเทอร์เน็ต
บริการต่างๆบนอินเทอร์เน็ตบริการต่างๆบนอินเทอร์เน็ต
บริการต่างๆบนอินเทอร์เน็ต
 
Marketing Brochure Smart Campus
Marketing Brochure Smart CampusMarketing Brochure Smart Campus
Marketing Brochure Smart Campus
 
Yobitel Communicaitons Corporate Brochure
Yobitel Communicaitons Corporate BrochureYobitel Communicaitons Corporate Brochure
Yobitel Communicaitons Corporate Brochure
 
디자인 패턴
디자인 패턴디자인 패턴
디자인 패턴
 
Smart campus transforming education
Smart campus   transforming educationSmart campus   transforming education
Smart campus transforming education
 
Tipo de obras captacion
Tipo de obras captacionTipo de obras captacion
Tipo de obras captacion
 
스키마 컨셉기획서
스키마 컨셉기획서스키마 컨셉기획서
스키마 컨셉기획서
 
Lullabies for little criminals
Lullabies for little criminalsLullabies for little criminals
Lullabies for little criminals
 

Ähnlich wie 연산자 오버로딩

Mec++ chapter3,4
Mec++ chapter3,4Mec++ chapter3,4
Mec++ chapter3,4
문익 장
 
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
Min-soo Park
 
Ec++ 3,4 summary
Ec++ 3,4 summaryEc++ 3,4 summary
Ec++ 3,4 summary
Sehyeon Nam
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2
문익 장
 
More effective c++ chapter1,2
More effective c++ chapter1,2More effective c++ chapter1,2
More effective c++ chapter1,2
문익 장
 
Chapter5 ~ 6
Chapter5 ~ 6Chapter5 ~ 6
Chapter5 ~ 6
Injae Lee
 
The C++ Programming Language 5장 포인터, 배열, 구조체
The C++ Programming Language 5장 포인터, 배열, 구조체The C++ Programming Language 5장 포인터, 배열, 구조체
The C++ Programming Language 5장 포인터, 배열, 구조체
해강
 

Ähnlich wie 연산자 오버로딩 (20)

Mec++ chapter3,4
Mec++ chapter3,4Mec++ chapter3,4
Mec++ chapter3,4
 
C++ Advanced 강의 5주차
C++ Advanced 강의 5주차C++ Advanced 강의 5주차
C++ Advanced 강의 5주차
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약
 
Effective c++ 정리 1~2
Effective c++ 정리 1~2Effective c++ 정리 1~2
Effective c++ 정리 1~2
 
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
 
Effective C++ Chaper 1
Effective C++ Chaper 1Effective C++ Chaper 1
Effective C++ Chaper 1
 
Ec++ 3,4 summary
Ec++ 3,4 summaryEc++ 3,4 summary
Ec++ 3,4 summary
 
Effective STL 1~4장 정리
Effective STL 1~4장 정리Effective STL 1~4장 정리
Effective STL 1~4장 정리
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2
 
2013 C++ Study For Students #1
2013 C++ Study For Students #12013 C++ Study For Students #1
2013 C++ Study For Students #1
 
More effective c++ chapter1,2
More effective c++ chapter1,2More effective c++ chapter1,2
More effective c++ chapter1,2
 
Chapter5 ~ 6
Chapter5 ~ 6Chapter5 ~ 6
Chapter5 ~ 6
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshin
 
C++ Advanced 강의 4주차
 C++ Advanced 강의 4주차 C++ Advanced 강의 4주차
C++ Advanced 강의 4주차
 
A tour of C++ : the basics
A tour of C++ : the basicsA tour of C++ : the basics
A tour of C++ : the basics
 
Chapter7~9 ppt
Chapter7~9 pptChapter7~9 ppt
Chapter7~9 ppt
 
Effective C++ Chapter 1 Summary
Effective C++ Chapter 1 SummaryEffective C++ Chapter 1 Summary
Effective C++ Chapter 1 Summary
 
The C++ Programming Language 5장 포인터, 배열, 구조체
The C++ Programming Language 5장 포인터, 배열, 구조체The C++ Programming Language 5장 포인터, 배열, 구조체
The C++ Programming Language 5장 포인터, 배열, 구조체
 
Let's Go (golang)
Let's Go (golang)Let's Go (golang)
Let's Go (golang)
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java
 

연산자 오버로딩

  • 1. 연산자 오버로딩 +α (const, C++스타일 형변환, 스마트 포인터) 작성자: 박수빈
  • 2. 목차  연산자 오버로딩이 필요한 이유  연산자 오버로딩 방법 ① 멤버 함수를 사용한 연산자 오버로딩 • 피연산자가 한 개인 경우와 두 개인 경우 ② 일반 함수를 사용한 연산자 오버로딩 ③ 적절한 const, inline, & 등의 사용  연산자 오버로딩의 규칙 및 주의사항  + α ① const ② C++ 스타일의 형변환 ③ 스마트 포인터
  • 3. 연산자 오버로딩이 필요한 이유  핵심: 클래스 타입을 기본 타입처럼 다룰 수 있게 한다. (클래스만 가능한 것은 아니고, 구조체도 물론 가능하다.)  예) • 연산자 오버로딩의 아주 기본적인 형 태이다. • operator+, operator!= 등 오버로딩 할 연산자를 이름으로 하는 함수를 정의 하면 된다. • 위 결과처럼 26줄과 27줄은 동일한 작 동을 한다. 즉, 같은 의미이다. • 이처럼 연산자 오버로딩을 통해, 기존 의 산술 연산, 논리 연산 등을 구조체 나 클래스 자료형에서도 이용하게 할 수 있다.
  • 4. 연산자 오버로딩 방법  1. 멤버 함수를 사용한 연산자 오버로딩 • 클래스의 경우 멤버 변수들이 보통 private 로 선언되는데, 멤버 함수로 연산자 오버로 딩을 할 경우 이에 접근하여 연산이 가능하 다.
  • 5. 연산자 오버로딩 방법  ++, -- 연산자의 경우 전치 연산, 후치 연산을 둘 다 정의해야 한 다. • 복소수 같은 타입을 클래스로 정의할 경우, ++연산 같은 것이 필요할 것인데, 이러한 연산은 전치 연산과 후치 연산을 둘 다 만 들어야 한다.
  • 6. 연산자 오버로딩 방법  2. 일반 함수를 사용한 연산자 오버로딩 • << 연산자처럼 양쪽의 피연산자가 서로 다른 객체일 경우 멤버 함수로 는 연산자 오버로딩이 불가능 하다. • 따라서 전역 함수로 선언하고 두 피 연산자를 모두 파라미터로 받아 구 현하는데, 해당 객체의 private데이 터에 접근하기 위해 friend 선언을 해주어야 한다.
  • 7. 연산자 오버로딩 방법  3. 적절한 const, inline, & 등의 사용 • 앞에서는 이해가 쉽도록 단순한 형태 로 선언했지만, 실제로 연산자 오버로 딩을 할 때에는 안전성과 속도의 최적 화를 위해 inline, const, 참조자 등을 사 용한다. • 기본적으로 파라미터는 불필요한 자료 의 복사를 막기 위해 (const Point& p) 이런 식으로 쓰며, • 대입 연산이 들어가는 +=,-=,*=,/= 등을 제외하고는 함수자체를 상수화 하기 위해 함수선언 뒤에 const를 붙여준다. • 또한 대입 연산은 자신을 다시 반환하 는 것이기 때문에, 불필요한 복사를 막 기 위해 &를 붙여준다.
  • 8. 연산자 오버로딩의 규칙 및 주의사 항 • 기존 연산 방법을 바꿀 수는 없다.  피연산자 중 적어도 하나는 객 체여야 한다. • 기존 연산자의 의미를 해치지 않 도록 주의해야 한다. 표 출처: 뇌를 자극하는 C++ 프로그래밍
  • 9. + α  1. const • 값이 바뀔 이유가 없는 변수들에는 웬만하면 const를 붙여주는 것이 좋다. • const는 속도 향상, 메모리 최적화에도 도움이 되는 경우가 있다. • 역시 가장 큰 이유는 안정성에 매우 큰 도움이 되기 때문. • const 사용법 • 포인터가 가리키는 대상 상수화 : const temp *ptr temp const *ptr • 포인터 변수를 상수화 : temp * const ptr • 둘 다 상수화 : const temp * const ptr • 함수 반환값 상수화: const int Function() { ... } • 멤버 함수 상수화 : void Function(int pram) const { ... }  상수 객체에 대해 호출될 함수임을 뜻하는 것. • 변경 불가능한 객체를 가리키는 반복자(Iterator)가 필요할 때는 const_iterator를 사 용
  • 10. + α  2. C++ 스타일 형변환 • C++은 총 4가지 형변환을 지원함 • 기존 C의 캐스팅 방식은 문제가 많음 (괄호가 많을 경우 알아보기 힘들고, 안전장치가 아무것도 안 되어 있음) • 따라서 가능하면 C++ 스타일의 캐스팅을 이용하는 게 좋다. • 상속 계층 구조를 이동할 때는 dynamic_cast 이용 (그러나 안정성이 향상되는 대신 속도가 저하되는 단점이 있어, 성능이 중요한 경우 static_cast 이용) • const 속성이나 volatile 속성을 제거할 때는 const_cast 이용 • 이외에 대부분의 경우 static_cast 이용 • 나머지 하나인 reinterpret_cast는 일반적으로 허용하지 않는 위험한 형변환을 할 때 사용되며(포인터를 정수로 변환하는 등), 거의 사용할 일이 없다.
  • 11. + α  3. 스마트 포인터 • 포인터에 자동소멸 기능 등을 추가하기 위해 클래스화 시킨 것으로, 기본적으로 소 멸자를 통해 가리키는 객체를 delete시키며, 기존의 포인터와 동일하게 쓰기 위해 . 과 ->에 대한 연산자 오버로딩이 되어있다. • 개인적으로도 스마트 포인터를 구현하여 사용할 수 있지만, C++11에서 매우 유용 하게 구현된 3가지 스마트 포인터가 있기 때문에 이것을 쓰는 것이 좋다. • unique_ptr 는 말 그대로 하나밖에 존재하지 않는 포인터로, 동시에 여러 포인터가 같은 데이터를 가리킬 수 없도록 구현되어 있다. (크기: 4바이트) • shared_ptr 는 참조 카운팅을 내재하여 여러 포인터가 같은 데이터를 가리킬 수 있 도록 하고, 가리키는 포인터가 전부 사라지면 메모리를 해제할 수 있도록 구현되어 있다. (크기: 8바이트) • weak_ptr 는 shared_ptr 의 순환참조 문제를 방지하기 위해 참조 카운트를 증가시키 지 않고 참조할 수 있도록 하는 shared_ptr 의 부가 서비스 격이다.