13. 연산자 오버로딩.

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

7 장 프렌드와 연산자 중복 1 명품 C++. 친구란 ? 2 우리 집 냉장고 내 침대 우리 집 TV 우리 집 식탁 친구 친구 ? 내 가족의 일원은 아니지만 내 가족과 동일한 권한을 가진 일원으로 인정받은 사람.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
ㅎㅎ C++ 프로그래밍의 첫 걸음 C++로 프로그래밍한다는 것의 의미 세상에서 가장 간단한 C++ 프로그램
ㅎㅎ C++ 프로그래밍의 첫 걸음 C++ 프로그래밍 기초 : 객체지향의 시작 C++로 프로그래밍한다는 것의 의미
C++ Espresso 제1장 기초 사항.
Chap07 상속 Section 1 : 상속의 개요 Section 2 : 멤버 변수의 상속
Report #5 - due: 4/13 다음 10*5의 희소 행렬 A, B를 고려하라.
최윤정 Java 프로그래밍 클래스 상속 최윤정
C++ Espresso 제10장 프렌드와 연산자 중복.
8. 객체와 클래스 (기본).
7장 배열 ②.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
명품 C++ 8장 상속.
Lesson 5. 레퍼런스 데이터형.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
명품 C++ 7장 프렌드와 연산자 중복.
명품 C++ 7장 프렌드와 연산자 중복.
18장. 헤더 파일과 구현 파일 01_ 헤더 파일과 구현 파일의 사용.
1. C++ 시작하기.
C ++ 프로그래밍 시작.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
정적 멤버 변수/정적 멤버 함수 - friend 함수/클래스 template
C++ Espresso 제12장 템플릿.
명품 C++ 4장. 객체 포인터와 객체 배열, 객체의 동적 생성.
제4장 클래스와 객체 객체 지향 기법을 이해한다. 클래스를 작성할 수 있다. 클래스에서 객체를 생성할 수 있다.
명품 C++ 8장 상속.
Lesson 7. 클래스와 메소드 - 1.
스택(Stack) 김진수
컴퓨터 프로그래밍 실습 #6 제 4 장 클래스 작성.
14. 예외처리.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
C#.
제14장 예외처리와 템플릿 예외 처리의 개요를 학습한다. 예외 처리를 적용할 수 있다. 템플릿의 개념을 이해한다.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
제5장 생성자와 접근제어 객체 지향 기법을 이해한다. 클래스를 작성할 수 있다. 클래스에서 객체를 생성할 수 있다.
Lesson 4. 수식과 연산자.
명품 C++ 9장 가상 함수와 추상 클래스.
제2장 제어구조와 배열 if-else 문에 대하여 학습한다. 중첩 if-else 문에 대하여 학습한다.
19. 함수 포인터와 void 포인터.
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
제 1장. C++ 시작하기.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
연산자 (Operator).
4. 고급변수 사용 : 포인터와 관련하여 메모리 바라보기
10. 문자열클래스와파일클래스.
2장. 변수와 타입.
Chapter 08. 함수.
루프와 카운트 Looping and counting
멤버 함수인 operator+()가 실행, 또는 전역 함수인 operator+()가 실행 Point p3 = p1+p2; 에서
멤버함수 중첩( 복사 생성자 ) - 연사자 중첩 - 동적 메모리를 가지는 클래스를 지원 하도록 멤버 함수 작성
제8장 포인터와 동적객체 생성 포인터의 개념을 이해한다. 포인터와 관련된 연산을 이해한다.
5. 논리적 자료표현 : 구조체.
12. 상속 : 고급.
함수(Function) ◈ 함수의 개념 및 사용 이유 ◈ 함수 정의, 호출 및 선언 ◈ 지역변수와 전역변수 ◈ return 문
Chapter 13. 템플릿(Template) 1
Chapter 2 C++ 함수와 네임스페이스. 최호성.
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
중복 멤버의 처리 조 병 규 한 국 교 통 대 학 교 SQ Lab..
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
3. 모듈 (5장. 모듈).
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
실습과제 1번 /* 1. 멤버 변수로 반경 radius를 갖고, 그 값을 모니터에 출력하는
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
OOP Practices OOP presentation 6 작성자 Kimjinsik 소속 Mobile computing Lab
Presentation transcript:

13. 연산자 오버로딩

차례 객체 연산 연산자 오버로딩

객체 연산 허수 클래스를 정의하고, 객체를 생성하여 허수 덧셈을 실행하기 클래스 이름: ImaginaryNumber 멤버 변수: 실수부와 허수부의 실수 (허수부의 실수는 0이 아닌 실수) 멤버 함수: 생성자 1: 실수부가 0, 허수부가 1로 초기화 생성자 2: 실수부와 허수부를 매개변수로 전달하여 값을 지정 실수부 값과 허수부 값을 각각 전달받는 함수 실수부 값과 허수부 값을 객체 외부로 전달하는 각각의 함수 허수 형태로 문자열을 작성하는 함수

소스 13-1 (ch13_ImaginaryNumber.h) int main() { ImaginaryNumber ima1(4.2,5.1); ImaginaryNumber ima2; ImaginaryNumber ima3; ima2.SetA(7.2); ima2.SetB(9.6); ima3=ima1.AddImaginary(ima2); //ima1과 ima2의 덧셈 결과가 리턴, ima3에 할당 cout << "( " << ima1.GetImaginaryNumber() << " ) + "; cout << "( " << ima2.GetImaginaryNumber() << " ) = "; cout << ima3.GetImaginaryNumber() << endl; return 0; } 소스 13-1 (ch13_ImaginaryNumber.h) #include <iostream> #include <string> using namespace std; class ImaginaryNumber { public: ImaginaryNumber(); ImaginaryNumber(const double a, const double b); void SetA(const double a); void SetB(const double b); double GetA(); double GetB(); string GetImaginaryNumber(); private: double a; //실수부 double b; //허수부 (b≠0) };

허수의 덧셈 멤버 함수 추가 ImaginaryNumber AddImaginary(ImaginaryNumber ima);  자기자신과 매개변수를 더해서 결과값을 리턴함 멤버 함수 정의 ImaginaryNumber ImaginaryNumber::AddImaginary(const ImaginaryNumber ima) { ImaginaryNumber res; res.a=this->a+ima.a; res.b=this->b+ima.b; return res; } 객체 덧셈을 위한 함수 정의

허수 덧셈 테스트 소스 13-5 (ch13_02.cpp) #include "ch13_ImaginaryNumber.h" int main() { ImaginaryNumber ima1(4.2,5.1); ImaginaryNumber ima2; ImaginaryNumber ima3; ima2.SetA(7.2); ima2.SetB(9.6); ima3=ima1.AddImaginary(ima2); //ima1과 ima2의 덧셈 결과가 리턴, ima3에 할당 cout << "( “; ima1.GetImaginaryNumber(); cout << " ) + "; ima2.GetImaginaryNumber(); cout << " ) = "; ima3.GetImaginaryNumber(); return 0; }

연산자 오버로딩 1 연산자 오버로딩 연산 대상에 대한 연산자 재정의 3+4  정수의 덧셈 연산 가능함!!! class TEST { …. }; TEST a, b; a+b  연산 불가능, TEST의 객체를 대상으로 하는 덧셈 연산 오버로딩해야함 string str1(“computer”), str2(“science”); str1+str2  연산 가능, string 객체를 대상으로 하는 덧셈 연산이 오버로딩되어 있음

연산자 오버로딩 2 연산자 오버로딩 함수 프로토타입 함수반환형 operator 연산자 (연산대상); ImaginaryNumber 클래스에 덧셈 연산 함수를 정의하면~ 함수 선언 : ImaginaryNumber operator+(const ImaginaryNumber object); 함수 정의 : ImaginaryNumber ImaginaryNumber::operator+(const ImaginaryNumber object) //연산자 오버로딩에 의해 추가된 연산자 함수 { ImaginaryNumber res; res.a=this->a+object.a; res.b=this->b+object.b; return res; }

소스 13-6 (ch13_03.cpp) 허수의 덧셈 객체 연산자 오버로딩 테스트~ #include "ch13_ImaginaryNumber.h" int main() { ImaginaryNumber ima1(2.7,6.3); ImaginaryNumber ima2; ImaginaryNumber ima3; ima2.SetA(7.2); ima2.SetB(9.6); ima3=ima1+ima2; //연산자 오버로딩으로 인해 덧셈 연산자 사용 가능!! cout << "( " << ima1.GetImaginaryNumber() << " ) + "; cout << "( " << ima2.GetImaginaryNumber() << " ) = "; cout << ima3.GetImaginaryNumber() << endl; return 0; }

증감 연산자 오버로딩 증감 연산자 선 증감 : ++a, --a 후 증감 : a++, a-- 클래스형 operator++( ); //선 증감 연산자 오버로딩 클래스형 operator++(int dummy); //후 증감 연산자 오버로딩 ImaginaryNumber 클래스의 증가 연산자 오버로딩 ImaginaryNumber operator++(void); ImaginaryNumber operator++(int dummy);

소스 13-9 (ch13_ImanginaryNumber.cpp) ImaginaryNumber ImaginaryNumber::operator++(void) //연산자 오버로딩에 의해 추가된 연산자 함수 { this->a++; return *this; } ImaginaryNumber ImaginaryNumber::operator++(int dummy) this->b++;

실습 – 시간 클래스 정의하기 클래스 이름: Time 멤버 변수: 시, 분, 초를 나타내는 부호 없는 정수와 초 단위로 시간을 나타냄 멤버 함수 : 생성자1: 매개변수 없이 멤버 변수를 0으로 초기화 생성자2: 시, 분, 초의 멤버 변숫값을 매개변수로 전달하여 초기화 초 단위로 시간을 나타내는 멤버 변숫값을 계산하는 멤버 함수 CalSecond( ) 각 멤버 변숫값을 설정하는 멤버 함수 각 멤버 변숫값을 외부로 전달할 수 있는 멤버 함수 '00시 00분 00초' 형태로 화면에 출력하는 멤버 함수

소스 13-10 (ch13_Time.h) #include <iostream> #include <string> using namespace std; class Time { public : Time(); Time(const int hour, const int min, const int sec); void SetHour(const int hour); void SetMin(const int min); void SetSec(const int sec); int GetHour(); int GetMin(); int GetSec(); int CalSec(); void ShowTime(); private : int hour, min, sec; int t_sec; };

Time 클래스에 <=, >= 오버로딩하기 멤버 함수 선언 bool operator<=(Time timeObj); bool operator>=(Time timeObj); 멤버 함수 정의 bool Time::operator<=(Time timeObj) { this->CalSec(); timeObj.CalSec(); if (this->t_sec<=timeObj.t_sec) return true; else return false; } bool Time::operator>=(Time timeObj) { this->CalSec(); timeObj.CalSec(); if (this->t_sec>=timeObj.t_sec) return true; else return false; }

소스 13-16 (ch13_06.cpp) Time 클래스 테스트 #include "ch13_Time.h" int main() { Time t1(7,30,20); cout << t1.ShowTime() << endl; cout << "시간 - 초단위 : " << t1.CalSec() << endl; Time t2(4,50,23); if (t1>=t2) cout << t1.ShowTime() << "이 " << t2.ShowTime() << "보다 크거나 같다!!" << endl; else cout << t2.ShowTime() << "이 " << t1.ShowTime() << "보다 크거나 같다!!" << endl; if (t1<=t2) return 0; }