C++의 다형성: 함수 오버로드를 사용하면 이름은 같지만 인수 목록이 다른 여러 함수가 호출될 때 인수 유형에 따라 실행되도록 선택됩니다. 함수 재정의를 사용하면 파생 클래스가 기본 클래스에 이미 존재하는 메서드를 재정의할 수 있으므로 개체 유형에 따라 다양한 유형의 동작을 달성할 수 있습니다.
C++ 함수 오버로드 및 재작성에서 다형성 구현
다형성은 객체 지향 프로그래밍의 핵심 개념 중 하나입니다. 이를 통해 다양한 유형(파생 클래스)의 개체가 동일한 함수 호출에 다르게 응답할 수 있습니다. C++에서는 함수 오버로딩과 오버라이딩을 통해 다형성을 구현합니다.
함수 오버로딩
함수 오버로딩은 이름은 같지만 매개변수 목록이 다른 여러 함수를 의미합니다. 컴파일러는 실제로 호출될 때 인수 유형에 따라 올바른 함수를 선택합니다. 예를 들어 다음 코드는 원이나 직사각형의 면적을 계산할 수 있는 area()
함수를 오버로드합니다. area()
函数,它可以计算圆或矩形的面积:
class Circle { public: double area(double radius) { return 3.14159 * radius * radius; } }; class Rectangle { public: double area(double length, double width) { return length * width; } };
重写
重写是指派生类中重新定义基类中已存在的方法。它允许派生类提供自己的实现,从而实现不同类型的行为。例如,以下代码在派生类 Square
中重写了基类 Rectangle
的 area()
方法来计算正方形的面积:
class Rectangle { public: virtual double area(double length, double width) { return length * width; } }; class Square : public Rectangle { public: virtual double area(double side) override { return side * side; } };
实战案例
考虑一个图形库,其中有 Shape
基类和 Circle
、Rectangle
和 Square
派生类。我们想创建一个函数 draw()
来绘制不同的图形。通过使用重载,我们可以提供不同的 draw()
方法来处理每种形状类型:
struct IShape { virtual void draw() = 0; }; struct Circle : public IShape { void draw() override { // 代码绘制圆 } }; struct Rectangle : public IShape { void draw() override { // 代码绘制矩形 } }; struct Square : public Rectangle { void draw() override { // 代码绘制正方形 } };
在调用 draw()
rrreee
Square
에 있는 기본 클래스 Rectangle
의 area()
메서드를 재정의하여 면적을 계산합니다. 정사각형: 🎜rrreee🎜 🎜실용 사례🎜🎜🎜 Shape
기본 클래스와 Circle
, Rectangle
및 가 있는 그래픽 라이브러리를 생각해 보세요. Square
파생 클래스. 다양한 모양을 그리는 draw()
함수를 만들고 싶습니다. 오버로드를 사용하면 각 모양 유형을 처리하는 다양한 draw()
메서드를 제공할 수 있습니다. 🎜rrreee🎜 draw()
메서드를 호출하면 C++에서 올바른 함수를 선택합니다. 개체 유형에 대한 버전입니다. 이를 통해 명시적인 변환이나 캐스트 없이도 다양한 유형의 그래픽을 처리하는 일반 코드를 작성할 수 있습니다. 🎜위 내용은 C++ 함수 오버로딩 및 재작성에서 다형성의 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!