연산자 오버로딩
연산자 오버로딩을 간단히 구현해보겠습니다.
오버로딩이란?
우선 오버로딩(overloading)이란 같은 이름의 메서드의 파라미터를 다르게 함으로서 여러 개의 매서드를 만드는 것을 말하빈다.
즉
int func(int a, int b) 와 int func(string a, string b)
는 파라미터가 다르므로 구분이 됩니다. 즉 이렇게 사용이 가능합니다.
연산자 오버로딩?
연산자 오버로딩이란 C++에서 제공하는 기본 타입이 아닌 것에 연산자를 사용할 수 있게 만들어 주는 것입니다.
예를 들어
1 + 1 같은 정수 연산은 기본적으로 제공합니다.
그렇다면 객체a 와 객체b의 +는 어떻게 될까요?
객체a + 객체b?
어떻게 더해야할지 감이 안 잡히죠?
이러한 것을 할 수 있게 해주는 것이 연산자 오버로딩입니다.
연산자 오버로딩 예제코드
이번 예제 코드는 객체의 멤버 변수를 모두 출력하는 예제입니다.
즉, 출력 연산자 오버로딩을 사용합니다.
또한 객체의 age요소를 더합니다. 더하기 연산자 오버로딩을 사용합니다.
6 : Person 클래스를 정의
8 : 초기화 리스트 사용
9 : 입출력 연산자 오버로딩. 정의할 메서드가 멤버 변수에 접근 가능하도록 하기 위해 friend사용.
friend를 사용하면 해당 메서드에서 private 멤버 변수에서 접근이 가능해진다.
10 : +연산자 오버로딩
17 : 부모 생성자 이용해 생성자 초기화(관련 링크), 초기화 리스트
25 : 출력 연산자 오버로딩
30 : 더하기 연산자 오버로딩, Person 객체의 age요소를 더하여 리턴
35 : 업캐스팅 후 출력 연산, 25번 줄의 코드를 실행한다.
출력 결과
(소스코드)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
#include <iostream>
#include <string>
using namespace std;
class Person {
public:
Person(string name, int age) : name(name), age(age) {};
friend ostream& operator<<(ostream& s, Person p);
friend int operator+(Person p1, Person p2);
private:
string name;
int age;
};
class Student:public Person {
public:
Student(string pid, string name, int age):pid(pid), Person(name, age) {};
friend ostream& operator<<(ostream& s, Student st);
private:
string pid;
};
ostream& operator<<(ostream& s, Person p) {//Person
cout << p.name << "\t" << p.age;
return s;
};
int operator+(Person p1, Person p2) {//Person
return p1.age + p2.age;
};
ostream& operator<<(ostream& s, Student st) {//Student
cout << (Person)st << "\t";
cout << st.pid;
return s;
}
int main(void) {
Person p1 = Person("gicheol", 25);
Student s1 = Student("202020", "miju", 27);
cout << p1 << endl;
cout << s1 << endl;
cout << p1 + s1 << endl;
}
|
cs |
댓글