>백엔드 개발 >C++ >C++ 함수 오버로딩 및 재작성 이해 및 사용

C++ 함수 오버로딩 및 재작성 이해 및 사용

王林
王林원래의
2024-04-20 15:36:011115검색

C++의 함수 오버로드를 사용하면 동일한 클래스에 동일한 이름을 가진 함수를 정의할 수 있지만 매개변수 목록은 다릅니다. 상위 클래스와 이름 및 매개변수가 동일한 함수가 하위 클래스에 정의되고 하위 클래스가 함수는 상위 클래스 함수를 덮어씁니다. 실제 예에서는 오버로드된 함수를 사용하여 다양한 데이터 유형에 대한 덧셈 연산을 수행하고, 오버라이드된 함수를 사용하여 상위 클래스의 가상 함수를 오버라이드하여 다양한 모양의 면적을 계산합니다.

C++ 函数重载和重写的理解和使用

C++ 함수 오버로딩 및 재작성: 심층적인 이해 및 실제 적용

함수 오버로딩

함수 오버로딩을 사용하면 동일한 클래스에서 동일한 함수 이름이지만 다른 매개변수 목록을 사용하여 여러 함수를 정의할 수 있습니다.

class MyClass {
public:
  int add(int a, int b);
  double add(double a, double b);
};

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

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

함수 재정의

함수 재정의는 상위 클래스와 동일한 이름과 동일한 매개변수 목록을 가진 하위 클래스에 함수가 정의될 ​​때 발생합니다. 하위 클래스 함수는 상위 클래스 함수를 재정의합니다.

class ParentClass {
public:
  virtual int display() {
    return 10;
  }
};

class ChildClass : public ParentClass {
public:
  int display() { // 重写父类的 display()
    return 20;
  }
};

실용 사례

오버로드된 함수의 예:

#include <iostream>

class Calculator {
public:
  int add(int a, int b) {
    return a + b;
  }

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

  std::string add(std::string a, std::string b) {
    return a + b;
  }
};

int main() {
  Calculator calc;
  std::cout << calc.add(1, 2) << std::endl;   // 输出:3
  std::cout << calc.add(1.5, 2.5) << std::endl; // 输出:4
  std::cout << calc.add("Hello", "World") << std::endl; // 输出:HelloWorld
  return 0;
}

재작성된 함수의 예:

#include <iostream>

class Shape {
public:
  virtual double area() = 0; // 纯虚函数(强制子类实现 area())
};

class Rectangle : public Shape {
public:
  Rectangle(double width, double height) : m_width(width), m_height(height) {}
  double area() override {
    return m_width * m_height;
  }

private:
  double m_width;
  double m_height;
};

class Circle : public Shape {
public:
  Circle(double radius) : m_radius(radius) {}
  double area() override {
    return 3.14 * m_radius * m_radius;
  }

private:
  double m_radius;
};

int main() {
  Rectangle rect(5, 10);
  Circle circle(5);
  std::cout << "Rectangle area: " << rect.area() << std::endl; // 输出:50
  std::cout << "Circle area: " << circle.area() << std::endl; // 输出:78.5
  return 0;
}

위 내용은 C++ 함수 오버로딩 및 재작성 이해 및 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.