반응형
함수 오버로딩(Function Overloading)

함수 오버로딩은 같은 이름의 함수를 여러 개 정의하는 것을 말한다.

오버로딩은 매개변수의 타입, 개수 또는 순서를 다르게 하여 동일한

이름으로 함수를 정의하는 것을 가능하게 한다.

 

함수 오버로딩은 다형성(Polymorphism)의 한 형태로 볼 수 있다.

이는 개발자가 같은 동작을 수행하는 함수들을 논리적으로 그룹화하고

통일된 이름을 부여할 수 있도록 해준다.

 

매개변수의 선언이 다르면 동일한 이름의 함수도 정의 가능하다.

 

반환형의 차이는 함수 오버로딩의 조건을 만족시키지 않는다.

매개변수의 형이 다른것은 만족된다.

 

함수 오버로딩은 매개변수의 타입, 개수, 순서 등이 달라야 구분이 가능하다.

반환 타입만 다른 경우에는 함수 오버로딩이 적용되지 않는다.

 

아래의 코드는 함수 오버로딩의 예시이다.

#include <iostream>

class Animal 
{
public:
    void makeSound() 
    {
        std::cout << "Animal makes a sound." << std::endl;
    }

    void makeSound(std::string sound) 
    {
        std::cout << "Animal makes a " << sound << " sound." << std::endl;
    }
};

int main() 
{
    Animal animal;
    animal.makeSound();               // "Animal makes a sound."
    animal.makeSound("roar");         // "Animal makes a roar sound."

    return 0;
}

 

 

 

매개변수의 디폴트 값

함수의 매개변수에서 값을 초기화해놓아서 함수를 실행할때 함수에

매개변수 값을 할당해 주지 않으면 자동으로 초기화해놓은 값이 할당된다.

 

함수를 선언부와 구현부를 나눌때는 선언부에 디폴트값을 넣어줘야한다.

 

매개변수 디폴트 값을 부분적으로 초기화할때 맨 우측의

매개변수에서부터  순차적으로 할당해줘야한다.

 

 

 

함수 오버라이딩(Function Overriding)

함수 오버라이딩은 상속 관계에서 부모 클래스의 메서드를 자식 클래스에서

재정의 하는 것을 말한다. 이는 자식 클래스가 부모 클래스의 동작을 변경하거나

확장할 수 있도록 해준다.

 

함수 오버라이딩은 다형성의 한 예로 볼 수 있다.

부모 클래스의 메서드를 호출하는 코드가 있을 때, 실제로 실행되는 메서드는

객체의 타입에 따라 결정된다. 따라서, 자식 클래스에서 오버라이딩한 메서드가

호출 될 수 있다.

 

함수 오버라이딩을 위해서는 부모 클래스와 자식 클래스 간에 상속 관계가 성립해야 한다.

자식 클래스에서 오버라이딩하려는 메서드는 부모 클래스에서 정의되어 있어야 한다.

오버라이딩 메서드는 부모 클래스의 메서드의 이름, 매개변수, 타입, 반환 타입과 동일해야 한다.

 

아래의 코드는 오버라이딩의 예시이다.

#include <iostream>

class Animal 
{
public:
    void makeSound() 
    {
        std::cout << "Animal makes a sound." << std::endl;
    }

    void move() 
    {
        std::cout << "Animal moves." << std::endl;
    }
};

class Dog : public Animal 
{
public:
    void makeSound() 
    {
        std::cout << "Dog barks." << std::endl;
    }

    void move() 
    {
        std::cout << "Dog runs." << std::endl;
    }
};

class Cat : public Animal 
{
public:
    void makeSound() 
    {
        std::cout << "Cat meows." << std::endl;
    }

    void move() 
    {
        std::cout << "Cat jumps." << std::endl;
    }
};

int main() 
{
    Animal animal;
    Dog dog;
    Cat cat;

    animal.makeSound();  // "Animal makes a sound."
    animal.move();       // "Animal moves."

    dog.makeSound();     // "Dog barks."
    dog.move();          // "Dog runs."

    cat.makeSound();     // "Cat meows."
    cat.move();          // "Cat jumps."

    Animal* animalPtr = &dog;
    animalPtr->makeSound();  // "Dog barks."
    animalPtr->move();       // "Animal moves."

    return 0;
}

 

반응형

 

반응형

'C++' 카테고리의 다른 글

객체에 대한 이해  (0) 2023.05.30
제네릭 프로그래밍  (0) 2023.05.30
구조체  (0) 2023.05.30
인라인 함수  (0) 2023.05.30
강한 타입 검사  (0) 2023.05.30

+ Recent posts