본문 바로가기
개인 개발 공부/C ++

1-6 함수

by minjoothi 2024. 11. 10.

funtion 

  1. 함수란?
  • 함수는 코드 뭉치로 자주 사용할 것 같은 코드를 한 군데 모아, 추후에도 사용하기 편하게 해주는 아주 좋은 기능이에요.
  • 자주 사용할 것 같은 코드들을 하나의 함수로 모은다 → 똑같은 코드를 사용해야 할 때에는 작성한 함수를 사용한다 → 작성하는 코드의 양이 줄어든다 → 적은 코드로 많은 기능을 만들 수 있다! 따라서 함수를 작성하실 땐, 반복되는 코드의 재사용성에 대해 생각해보는 게 매우 중요합니다.
#include <iostream>

int sayHello(int number);

int main()
{
    using namespace std;
    cout << "main" << endl;
    cout << "result : " << sayHello(-5) << endl; //말이 안되게

    return 0;
}

int sayHello(int number)
{
    using namespace std;
    if (number < 1) //예외처리함, 1보다 작으면
    {
        return -1; //-1을 리턴해줘
    }
}
더보기
매일 std를  붙이는 이유 :
 

std는 C++ 표준 라이브러리의 네임스페이스 이름입니다. C++ 표준 라이브러리에는 입출력(cout, cin), 문자열(string), 벡터(vector) 등 유용한 기능들이 모여 있고, 이들이 모두 std라는 네임스페이스 아래에 있습니다.

네임스페이스는 같은 이름을 가진 함수나 변수 등이 충돌하지 않도록 구분해주는 역할을 합니다. C++에서는 이 표준 라이브러리의 기능들이 std 네임스페이스에 속해 있기 때문에, 이를 사용할 때 std::를 붙여주는 거예요. std를 붙임으로써 "이것은 표준 라이브러리에서 가져온 것"이라는 뜻을 명확히 하는 것이죠.

overloading

overloading : c++에서 가장 중요한 개념 중 하나
 
예를 들어 int add1, int add2 이렇게 사용하던것이 너무 이름이 길어서 변수명을 통일하고 싶을때 일단 add로 변수를 통일해주고 overriding 해주셈
 

//functionoverloading.cpp
#include <iostream>

using namespace std;

int add(int a, int b); //인자의 개수
int add(int a, int b, int c);

int main()
{
    cout << add(1, 2) << endl;
    cout << add(1, 2, 3) << endl;
    return 0;
}

int add(int a, int b)
{
    cout << "addTwo" << endl;
    return a+b;
}

int add(int a, int b, int c)
{
    cout << "addThree" << endl;
    return a+b+c;
}

오버로딩과 오버라이딩 차이

C++에서 **오버로딩 (Overloading)**과 **오버라이딩 (Overriding)**은 서로 다른 개념이며, 주로 함수와 메서드에 적용됩니다.

1. 오버로딩 (Overloading)


- 오버로딩은 같은 이름의 함수나 연산자를 매개변수의 타입이나 개수를 다르게 정의하여 여러 버전을 만드는 것입니다.
- 함수 오버로딩은 컴파일 타임에 결정되며, 호출되는 함수가 매개변수에 따라 구분됩니다.
- 예를 들어, add(int a, int b)와 add(double a, double b)처럼 같은 이름을 가진 함수지만 매개변수가 다를 때, 이를 오버로딩이라 합니다.

int add(int a, int b) {
    return a + b;
}

double add(double a, double b) {
    return a + b;
}

2. 오버라이딩 (Overriding)


- 오버라이딩은 상속 관계에서 사용되는 개념으로, 부모 클래스에 정의된 함수를 자식 클래스에서 재정의하여 다른 동작을 하도록 만드는 것입니다.

- 오버라이딩된 함수는 런타임에 결정되며, 자식 클래스의 객체를 통해 호출할 경우 부모 클래스의 함수 대신 자식 클래스에서 재정의된 함수가 실행됩니다.
• 예를 들어, 부모 클래스의 speak() 메서드를 자식 클래스에서 새롭게 정의하는 경우, 이를 오버라이딩이라 합니다.

class Animal {
public:
    virtual void speak() {
        cout << "Animal speaks" << endl;
    }
};

class Dog : public Animal {
public:
    void speak() override {  // override를 명시적으로 사용해줌
        cout << "Dog barks" << endl;
    }
};

정리

- 오버로딩(Overloading)은 **같은 이름의 기능**을 상황에 따라 다르게 사용하도록, 함수에 들어가는 값의 **종류나 개수를 달리하여 정의**하는 것입니다. 예를 들어, `add(3, 4)`는 두 숫자를 더하고, `add(3, 4, 5)`는 세 숫자를 더하는 식입니다. 반면, 오버라이딩(Overriding)은 **부모 클래스에 있는 기능을 자식 클래스에서 자기 방식으로 바꾸어 사용하는 것**입니다. 예를 들어, 부모 클래스의 `소리내기()`가 "동물이 소리를 냅니다"라고 한다면, 자식인 `개` 클래스에서는 이 기능을 "멍멍!"으로 바꿔 사용할 수 있게 됩니다.

'개인 개발 공부 > C ++' 카테고리의 다른 글

1-8. 배열과 2차원 배열  (0) 2024.11.11
1-7. 포인터와 참조  (0) 2024.11.11
1-5 반복문과 다중반복문  (0) 2024.11.09
조건문  (0) 2024.11.09
연산자  (0) 2024.11.09