본문 바로가기
카테고리 없음

[C++] 연산자 오버로딩, 출력 연산자 오버로딩 구현

by 도도새 도 2022. 6. 16.

연산자 오버로딩

 

 연산자 오버로딩을 간단히 구현해보겠습니다.

 

오버로딩이란?

 우선 오버로딩(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

 

댓글