[C++] 멤버함수와 외부 함수를 이용한 OOP(feat. friend, operator)

2020. 5. 2. 21:01·🖥️ 컴퓨터공학 🖥️/C | C++
반응형

문제

 

요구 사항 분석

1.     Rect 클래스 생성 및 width, height 멤버 변수 생성

2.     Rect 메소드 생성

3.     c의 가로, 세로, 면적을 나타내는 void 형의 show메소드를 생성

+operator(멤버 함수)

1.     Rect 클래스 안에 operator+라는 연산자를 정의

2.     매개변수는 b로 하고 c의 가로와 세로를 구함.

 

-operator(외부 함수)

1. friend 형식으로 연산자 –를 Rect 클래스 안에 정의

2. 매개 변수로 Rect 클래스의 객체인 a와 b를 정의

 

main함수 설정

1.     a와 b에 가로와 세로 값을 설정

2.     a에서 b를 뺏을 때 c의 가로, 세로, 면적을 출력

3.     a에서 b를 뺏을 때 c의 가로, 세로, 면적을 출력

 

소스 코드

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include<iostream>
 
using namespace std;
 
class Rect;//오류를 방지 하기 위해 정의
 
class Rect {
 
private://가로와 세로를 private로 정의
 
        int width;
 
        int height;
 
public:
 
        Rect(int width = 0, int height = 0) {this->width = width; this->height = height;}
 
        //Rect메소드를 설정하고 이 메소드 안의 width와 height에 private으로 정의한
 
        //변수를 대입
 
        Rect operator +(Rect b);//맴버함수 형식의 연산자+를 설정
 
        void show();//가로 세로 면적을 출력하는 메소드
 
        friend Rect operator-(Rect a, Rect b);//외부함수 형식의 연산자 -를 설정, 그리고 friend로 설정
 
};
 
Rect Rect::operator+(Rect b) {
 
        Rect c;
 
        c.width = this->width + b.width;
 
        c.height = this->height + b.height;
 
        return c;
 
//클래스의 소속된 연산자를 재정의 하게되면 인자가 2개가 아니라 한개가 됨. 즉, 클래스
 
//자신이 이미 1개의 인자역활을 하기 때문에 그렇다. 위 예제의 + 연산자 오버로딩하는 함수를
 
//아래와 같이 수정해야 함
 
}
 
Rect operator-(Rect a, Rect b) {
 
        Rect c;
 
        c.width = a.width - b.width;
 
        c.height = a.height - b.height;
 
        return c;
 
//매개변수로 사용한 Rect 클래스의 객체인 a,b를 이용하여 c를 return
 
}
 
void Rect::show() {
 
        cout << "가로는 " << width<< "," << "세로는" << height<< "," << "면적은" << height*width << endl;
 
//가로 세로 면적을 출력하는 메소드
 
}
 
int main() {
 
        Rect a(5, 8), b(1, 5), c;
 
//a와 b의 가로 세로를 설정
 
        c = a - b;
 
        c.show();
 
//a에서 b를 뺀 결과인 c의 show()값
 
        c = a + b;
 
        c.show();
 
//a에서 b를 더한 결과인 c의 show()값
 
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

 

클래스 설계도

 


프로그램 설계도

 

실행 결과

의견

다소 무난한 것 같았지만 중간에 “이 연산자 함수에 매개변수가 너무 많습니다”라는 오류 메시지가 떴을 때는 많이 당황했다. 구글링해서 오류를 찾아본 결과 “클래스의 소속된 연산자를 재정의 하게되면 인자가 2개가 아니라 한개가 됨. 즉, 클래스 자신이 이미 1개의 인자역활을 하기 때문에 그렇다. 위 예제의 + 연산자 오버로딩하는 함수를 아래와 같이 수정해야 함”이라는 사실을 알게 되어서 신기하였다.

728x90
반응형

'🖥️ 컴퓨터공학 🖥️ > C | C++' 카테고리의 다른 글

[C++] C++에서의 배열 선언  (0) 2020.06.08
[C++] 가상함수 상속을 이용하여 값을 변환해주는 클래스 작성  (0) 2020.05.24
[C++] 다중상속을 이용한 연산 프로그램(feat. public 다중상속)  (0) 2020.05.20
[C++] 객체 배열화를 이용하여 정사각형 넓이 구하기  (0) 2020.04.19
[C++] 객체 지향을 이용한 c++ 프로그래밍  (0) 2020.04.10
'🖥️ 컴퓨터공학 🖥️/C | C++' 카테고리의 다른 글
  • [C++] 가상함수 상속을 이용하여 값을 변환해주는 클래스 작성
  • [C++] 다중상속을 이용한 연산 프로그램(feat. public 다중상속)
  • [C++] 객체 배열화를 이용하여 정사각형 넓이 구하기
  • [C++] 객체 지향을 이용한 c++ 프로그래밍
공대생 배기웅
공대생 배기웅
군노답 미필 공대생 배기웅의 대학생활을 갈아 넣은 블로그
    반응형
  • 공대생 배기웅
    글쓰는공대생의 IT블로그
    공대생 배기웅
  • 전체
    오늘
    어제
    • 분류 전체보기 (166)
      • 🖊️ 공대생 글쓰기 🖊️ (17)
        • 공대생 회고록 (4)
        • 공대생의 끄적끄적 (4)
        • 슬기로운 공대생활 (9)
        • 사회초년생의 업무일기 (0)
      • 📈 산업공학 📈 (14)
        • 금융, 파생상품 (13)
        • 통계 (0)
        • 재무회계 (1)
      • 🖥️ 컴퓨터공학 🖥️ (92)
        • 머신러닝, 딥러닝 (12)
        • 텐서플로우, 케라스 (1)
        • 알고리즘 (24)
        • 웹 (5)
        • Python (3)
        • C | C++ (23)
        • Java (15)
        • 코드 에러 모음집 (9)
      • 😙 취미, 교양 😙 (2)
        • 영어공부 (1)
        • 일본어회화 공부 (1)
      • 🔍 정보 공유 🔍 (38)
        • 대학생 외부활동 정보 (2)
        • 개발자관련 정보 (3)
        • 대입 논술 입시자료 정보 (22)
        • 프로그램 세팅 (11)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

    • [공지] 글쓰는 공대생입니다 😃
  • 인기 글

  • 태그

    자바
    조작자
    재귀함수
    객체지향
    이클립스
    Java
    무작위 변수
    프랜드함수
    스캐너
    알고리즘
    프로그래머스
    경제성공학
    acmicpc
    Operator
    OOP
    백준
    C++
    equals프레임워크
    예외
    데이터베이스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
공대생 배기웅
[C++] 멤버함수와 외부 함수를 이용한 OOP(feat. friend, operator)
상단으로

티스토리툴바