도서 : C++ 프로그래밍 입문(한티미디어)

지음 : 황준하, 김성영

 


  • 함수 오버로딩이란? : 같은 이름의 함수명을 여러개 선언 하더라도 매개 변수의 개수나 타입이 서로 다르다면 사용할 수 있는 방식 -> 변수의 타입이 다르고 이름이 같은 함수들은 입력하는 변수에 따라 맞는 함수를 찾게된다. 만약 입력한 변수가 모든 함수의 매개변수타입과 일치하는 타입이 아니라면 변환이 가능한지 판단하여 찾아낸다. 그러나 이럴경우 변형이 가능한 타입이 여러 함수에 걸쳐 중복될 수 있으므로 컴파일오류가 발생할 수 있다.

 

  • 연습문제 2.4 - 직사각형과 원의 면적을 계산하는 GetArea하는 함수를 작성하고자 한다. 사용자로부터 계산하고자 하는 모양을 입력받고, 직사각형일 경우 가로와 세로값을 입력받고 원일 경우 반지름을 입력받는다. 그리고 GetArea 함수를 통해 면적을 계산하여 화면에 출력하라. 직사각형에 대한 GetArea 함수의 경우 가로, 세로값을 필요로 하고 원에 대한 GetArea 함수는 반지름 값을 필요로 한다. 매개 변수의 개수가 서로 다르므로 함수 오버로딩이 가능할 것이다.
    • 내가 만든 코드
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
#include <iostream>
#include <stdio.h>
#include <string.h>
 
using namespace std;
 
double GetArea(double a, double b) {
    return a * b;
}
 
double GetArea(double a) {
    return a * a;
}
 
int main(void) {
    double x, y, z;
    char type[10];
 
    cout << "계산하고 싶은 도형을 입력해주세요 : 1. 직사각형 2. 원" << endl;
    cin >> type;
 
    if(strcmp(type,"직사각형"== 0) {
        cout << "직사각형이라면 가로와 세로의 길이를, 원이라면 반지름의 길이를 입력해주세요" << endl;
        cin >> x >> y;
        z = GetArea(x, y);
        cout << type << "의 면적 : " << z;
    }
    else if(strcmp(type,"원"== 0) {
        cout << "직사각형이라면 가로와 세로의 길이를, 원이라면 반지름의 길이를 입력해주세요" << endl;
        cin >> x;
        z = GetArea(x);
        cout << type << "의 면적 : " << z << "π";
    }
    else
    {
        cout << "잘못 입력하셨습니다." << endl;
        return 0;
    }
 
    return 0;
}
cs
    • 결과

 

 

+ Recent posts