C++에서 함수 오버로딩 VS 오버라이드

Jinku Hu 2023년10월12일
  1. 함수 오버로딩을 사용하여 C++에서 다른 매개 변수 목록으로 여러 함수 정의
  2. 함수 재정의를 사용하여 C++의 파생 클래스에서 상속 된 멤버 재정의
C++에서 함수 오버로딩 VS 오버라이드

이 기사에서는 C++에서 함수 오버로딩 VS 재정의 간의 차이점을 소개합니다.

함수 오버로딩을 사용하여 C++에서 다른 매개 변수 목록으로 여러 함수 정의

함수 오버로딩은 동일한 이름을 가진 여러 함수를 가질 수있는 C++ 언어의 기능으로, 매개 변수가 다르고 하나의 범위에 있습니다. 일반적으로 오버로드 된 함수는 매우 유사한 작업을 수행하며 단일 함수 이름을 정의하고 여러 매개 변수 세트로 인터페이스를 노출하는 것이 직관적입니다. 이 경우printNumAcu라는 3 개의 함수를 사용하여Planet이라는 클래스를 정의했습니다. 이러한 모든 함수는 다른 매개 변수를 가지며 컴파일 시간에 구별됩니다. 오버로드 된 함수는 다른 매개 변수 유형 또는 다른 수의 매개 변수를 가져야합니다.

#include <iostream>

using std::cin;
using std::cout;
using std::endl;
using std::string;

class Planet {
 private:
  int num{};

 public:
  explicit Planet(int i) : num(i) {}

  void printNumAcu() const { cout << num * num << endl; }

  void printNumAcu(int x) const { cout << num * num * x << endl; }

  void printNumAcu(int x, int y) const { cout << num * num * x * y << endl; }
};

int main() {
  Planet m1(3);

  m1.printNumAcu();
  m1.printNumAcu(3);
  m1.printNumAcu(3, 3);

  return EXIT_SUCCESS;
}

출력:

9
27
81

함수 재정의를 사용하여 C++의 파생 클래스에서 상속 된 멤버 재정의

함수 재정의는 파생 클래스 및 해당 상속과 관련된 기능입니다. 일반적으로 파생 클래스는 모든 기본 클래스 멤버를 상속하고 일부는 파생 클래스에서 재정의되어 사용자 지정 루틴을 구현합니다. 그러나 기본 클래스는 재정의해야하는 멤버 함수를 지정해야합니다. 이러한 멤버 함수를 가상 함수라고하며 정의에virtual키워드도 포함합니다. 정의 할 필요가없는 가상 기능의 유형 인 순수 가상 기능의 개념도 있습니다. 순수 가상 함수를 포함하거나 상속하는 (무시) ​​클래스를 추상 기본 클래스라고하며, 일반적으로 객체를 만드는 데 사용해서는 안되며 다른 클래스를 파생시킵니다.

#include <iostream>

using std::cin;
using std::cout;
using std::endl;
using std::string;

class Planet {
 protected:
  int num{};

 public:
  explicit Planet(int i) : num(i) {}

  virtual void printName() = 0;
};

class Mars : public Planet {
 public:
  explicit Mars(int i) : Planet(i) {}

  void printName() override { cout << "Name's Mars " << num << endl; }
};

class Earth : public Mars {
 public:
  explicit Earth(int i) : Mars(i) {}

  void printName() override { cout << "Name's Earth " << num << endl; }
};

int main() {
  Earth e1(3);

  e1.printName();
  Mars m1 = e1;
  m1.printName();

  return EXIT_SUCCESS;
}

출력:

Name's Earth 3
Name's Mars 3
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

관련 문장 - C++ Function