C++ Programming 연산자다중정의 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com
목 차 연산자다중정의 C++ 스타일의문자열 2
연산자다중정의 연산자다중정의 단항연산자다중정의 이항연산자다중정의 cin, cout 그리고 endl C++ 스타일의문자열 3
연산자다중정의 연산자다중정의 (Operator Overloading) operator 와연산자기호를통해연산자의기능을다중정의 클래스를 C++ 의기본자료형과같이다룰수있는방법 operator+() ; // 주어진연산자의기능정의 4
이항연산자다중정의 이항연산자 (binary operator) 다중정의 이항연산자 : 두개의연산자에대한연산을수행하는연산자 대표적인이항연산자 : +, -, *, /, % p + 10 p.operator+(int) 멤버함수로다중정의한함수 int x; int y; ( 생략 ) Point operator+(const Point &p, int) 일반함수로다중정의한함수 5
이항연산자다중정의 정의 (cont d) 멤버함수에의한이항연산자다중정의 class Point int x, y; public: Point(int t x = 0, int y = 0); void ShowPosition(void); Point operator+(int num) Point int x; int y; temp(x + num, y + num); Point Point(int = 0, int = 0); void ShowPosition(); Point operator+(int); ; return temp; int main(void) Point a(10, 20); Point res = a + 10; // Point res = a.operator+(10); 6
이항연산자다중정의 정의 (cont d) 일반함수에의한이항연산자다중정의 class Point int x, y; public: Point(int t x = 0, int y = 0); void ShowPosition(void); friend Point operator+(const Point &, int ; num); Point::Point(int x, int y) this->x = x; this->y = y; int main(void) Point a(10, 20); Point int x; Point res = a + 10; int y; Point(int = 0, int = 0); void ShowPosition(); friend Point operator+(const Point &, int); 7
이항연산자다중정의 이항연산자의교환법칙 정의 (cont d) 교환법칙성립 p + 10 == 10 + p int x; int y; ( 생략 ) Point 8
이항연산자다중정의 정의 (cont d) 프로그램예제 : 이항연산자의다중정의 (1/2) #include <iostream> using std::cin; using std::cout; using std::endl; class Point int x, y; public: Point(int x = 0, int y = 0); void ShowPosition(); Point operator+(int num); friend Point operator+(int num, Point &p); ; Point::Point(int x, int y) this->x = x; this->y = y; void Point::ShowPosition() cout << "(" << x << ", " << y << ")" << endl; 9
이항연산자다중정의 정의 (cont d) 프로그램예제 : 이항연산자의다중정의 (2/2) Point Point::operator+(int num) Point return temp; temp(x + num, y + num); Point operator+(int num, Point &p) return p + num; int main() Point p1(10, 20); cout << "p1 : "; p1.showposition(); Point p2 = p1 + 10; cout << "\np1 + 10" << endl; cout << "p2 : "; p2.showposition(); p2 = 10 + p1; cout << "\np2 = 10 + p1" << endl; cout << "p2 : "; p2.showposition(); 10
단항연산자의다중정의 단항연산자 (unary operator) 다중정의 단항연산자 : 하나의피연산자에대한연산을수행하는연산자 대표적인단항연산자 : ++, -- ++p p.operator++() 멤버함수로다중정의한함수 int x; int y; ( 생략 ) Point operator++(point &p) 일반함수로다중정의한함수 11
단항연산자다중정의 정의 (cont d) 멤버함수에의한단항연산자다중정의 class Point int x, y; public: Point(int t x = 0, int y = 0); void ShowPosition(void); Point &operator++() ++x; ++y; int x; int y; Point Point(int = 0, int = 0); void ShowPosition(); Point &operator++(); ; return *this; int main(void) Point a(10, 20); ++a; // a.operator++(); 12
단항연산자다중정의 정의 (cont d) 일반함수에의한단항연산자다중정의 class Point int x, y; public: Point(int t x = 0, int y = 0); void ShowPosition(void); friend Point &operator++(point &); Point &operator++(point &p) ++p.x; ++p.y; return p; int main(void) Point Point a(10, 20); int x; ++a; int y; Point(int = 0, int = 0); void ShowPosition(); friend Point &operator++(point &); 13
단항연산자다중정의 전위와후위증감연산자 증감연산자 : ++, -- 정의 (cont d) ++p p.operator++() p++ p.operator++(int) --p p.operator--() p-- p.operator--(int) 14
cin 과 cout cin, cout 그리고 endl cout << Hi~ Clickseo ; cout << 100; cout << 3.14159; cout << endl; cout << Hi~ Clickseo << 100 << 3.14159 << endl; int n; double d; char name[12]; cin >> n; cin >> d; cin >> name; cin >> n >> d >> name; 15
cin, cout 그리고 endl (cont d) 프로그램예제 : cin, cout 그리고 endl (1/2) #include <iostream> #include <cstdio> namespace mystd char *endl = " n"; class ostream public: ostream &operator<<(char *str) ; ostream cout; printf(" %s ", str); return *this; ostream &operator<<(int n) printf(" %d ", n); return *this; ostream &operator<<(double d) printf(" %f ", d); return *this; 16
cin, cout 그리고 endl (cont d) 프로그램예제 : cin, cout 그리고 endl (2/2) using mystd::cout; t using mystd::endl; int main() cout << "Hi~ Clickseo" << endl; cout << 100 << endl; cout << 3.14159 << endl; cout << "Hi~ Clickseo" << 100 << 3.14159 << endl; 17
C++ 스타일의문자열 연산자다중정의의이해 C++ 스타일의문자열 C/C++ 스타일의문자열 문자열과연산자다중정의 string 클래스멤버함수 18
C 스타일의문자열 C/C++ 스타일의문자열 C++ 에서제공하는문자열조작함수를사용 : <cstring> #include <iostream> #include <cstring> int main(void) char char int str[] = "Hi~ Clickseo!!!"; copy[1024]; len = strlen(str); strcpy(copy, str); std::cout << "str : " << str << std::endl; std::cout << "copy : " << copy << std::endl; 19
C/C++ 스타일의문자열 (cont d) C++ 스타일의문자열 string : basic_string 클래스를재정의한형태 #include <iostream> #include <string> using std::cout; using std::endl; using std::string; int main(void) string s = "Hello World!!!!"; cout << s << endl; 20
문자열과연산자다중정의 프로그램예제 : 문자열복사 #include <iostream> #include <string> using std::cout; using std::endl; using std::string; int main(void) string string str = "Hello World!!!!"; copy; cout << "str : " << str << endl; cout << "copy : " << copy << endl; copy = str; cout << "str : " << str << endl; cout << "copy : " << copy << endl; 문자열복사 : str2 = str1; 21
문자열과연산자다중정의 프로그램예제 : 문자열의결합 #include <iostream> #include <string> using std::cout; using std::endl; using std::string; int main(void) 정의 (cont d) 문자열의결합 : str1 + str2 string str1 = "Hi~ "; string str2 = "Clickseo"; cout << "str1 : " << str1 << endl; cout << "str2 : " << str2 << endl; str1 = str1 + str2; cout << "str1 : " << str1 << endl; cout << "str2 : " << str2 << endl; 22
문자열과연산자다중정의 프로그램예제 : 문자열의비교 #include <iostream> #include <string> using std::cout; using std::endl; 정의 (cont d) using std::string; int main(void) string str1 = "Hi~ "; string str2 = "Clickseo"; 문자열의비교 : str1 == str2 str1!= str2 cout << "str1 : " << str1 << endl; cout << "str2 : " << str2 << endl; if( str1 == str2 ) if( str1!= str2 ) cout << " 일치!!!" << endl; cout << " 불일치!!!" << endl; 23
string 클래스멤버함수 (cont d) 프로그램예제 : 공백이포함된문자열입력 #include <iostream> #include <string> using std::cout; using std::endl; using std::string; int main(void) char name[12]; // C 스타일 string str; // C++ 스타일 cin.getline(name, 12); getline(cin, str); // C 스타일 // C++ 스타일 cout << "name : " << name << endl; cout << "str : " << str << endl; 24
string 클래스멤버함수 (cont d) 프로그램예제 : 문자열의길이 #include <iostream> #include <string> using std::cout; using std::endl; using std::string; int main(void) string string str1; str2 = "Hello World!!!"; string str3 = "12345"; 문자열의길이 : str.size(); cout << "str1 : " << str1.size() << endl; cout << "str2 : " << str2.size() << endl; cout << "str3 : " << str3.size() << endl; 25
string 클래스멤버함수 (cont d) 프로그램예제 : 문자열의검색 #include <iostream> #include <string> using std::cout; using std::endl; using std::string; int main(void) string str = "Hi~ Clickseo"; 문자열의검색 : str.find(s); cout << "str : " << str << endl; cout << str.find("clickseo") << endl; 26
string 클래스멤버함수 (cont d) 프로그램예제 : 문자열의일부분얻기 #include <iostream> #include <string> using std::cout; using std::endl; using std::string; int main(void) string str = "Hi~ Clickseo"; int len = str.size(); string sub = str.substr(len - 3, 3); cout << "str : " << str << endl; cout << "sub : " << sub << endl; 일부문자열추출 : str.substr(begin, size); 27
참고문헌 [1] 윤성우, 열혈강의 C++ 프로그래밍, 프리렉, 2007. [2] 이현창, 뇌를자극하는 C++ 프로그래밍, 한빛미디어, 2008. [3] H.M. HM Deitel, P. J. Deitel, C++ HOW TO PROGRAM : 6th Edition, Prentice Hall, 2009. [4] Wikipedie, http://www.wikipedia.org/. 이강의자료는저작권법에따라보호받는저작물이므로무단전제와무단복제를금지하며, 내용의전부또는일부를이용하려면반드시저작권자의서면동의를받아야합니다. Copyright Clickseo.com. All rights reserved. 28