컴퓨터 언어/C++

[C++] C++ 16일차 함수 오버로딩 2

훈츠 2020. 4. 20. 12:14
반응형

안녕하세요. 훈츠입니다. 금일은 함수 오버로딩에 관해 포스팅 합니다.

 

함수 오버로딩

함수 오버로딩은, 같은 기능을 하지만 다른 매개변수를 처리해야할때 사용하시면 좋습니다.

 

  • 클래스 안에서 함수명을 중복하여 사용 가능합니다.

  • 함수의 매개변수로 같은 함수를 구분 합니다.

  • 매개변수만 오버로딩에 관계되며 리턴형은 상관 없습니다.

 

형식

  •  리턴형 함수명 (매개 변수들…)

 

오버로딩시 주의 사항

  • 매개 변수의 모호성에 유의 하세요.

 

오버로딩 예시

코드

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
 
class A
{
private:
    char m_cVar;
    int m_nVar;
    float m_fVar;
public:
    void Set(char cVar) { m_cVar = cVar; }
    void Set(int nVar) { m_nVar = nVar; }
    void Set(float fVar) { m_fVar = fVar; }
    char GetChar() { return m_cVar;  }
    int GetInt() { return m_nVar; }
    float GetFloat() { return m_fVar; }
};
 
int main()
{
    A test;
    test.Set('s');
    test.Set(1);
    test.Set(3.14f);  // f 안써면 에러 납니다. 
 
    cout << test.GetChar() << endl;
    cout << test.GetInt() << endl;
    cout << test.GetFloat() << endl;
    return 0;
}
 
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

출력 결과

클래스 객체의 복사

  • 클래스도 사용자 정의 타입이므로 클래스 객체도 복사 가능

  • 멤버와 멤버간의 값 복사

 

클래스 객체 복사시 주의 사항

  • 클래스 멤버중 포인터가 있는 경우 복사 될때 이전 메모리 주소가 삭제 됩니다.

  • 클래스 객체에 포인터가 있고, 객체 복사를 하면 에러가 발생하므로 없을때 하는게 좋습니다.

 

클래스 객체의 복사 형식

  • Class A test1, test2;

  • test1 = test2;

 

코드

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
 
class A
{
private:
    int m_nVar;
    int m_nArray[3];
public:
    A(int nVar) : m_nVar(nVar) {
        m_nArray[0= m_nArray[1= m_nArray[2= m_nVar;
    }
    void Print(string str) {
        cout << str << endl;
    }
    void Print() {
        cout << "m_nVar : " << m_nVar << endl;
        cout << "m_nArray :";
        for (int i = 0; i < 2; i++) {
            cout << m_nArray[i] << '\t';
        }
        cout << endl << endl;;
    }
    
};
 
int main()
{
    A test1(5);
    A test2(10);
    test1.Print("test1");
    test2.Print("test2");
    test1 = test2;
    test1.Print("test1");
    test2.Print("test2");
 
    return 0;
}
 
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

출력화면

test1 에 test2 의 값이 복사가 이루어진것을 확인 할수있습니다. 

 

반응형