C++ 다형성을 사용하면 객체를 가상 함수와 가상 테이블을 통해 구현하여 다양한 방식으로 사용할 수 있습니다. 파생 클래스 객체가 기본 클래스와 다르게 동작하도록 만듭니다. 즉, 가상 함수를 사용하면 파생 클래스에서 기본 클래스 함수를 재정의할 수 있습니다. 가상 테이블은 가상 함수 주소에 대한 포인터를 저장하고 객체 유형에 따라 적절한 함수를 동적으로 찾아서 호출합니다. 실제 예제에서는 다형성을 사용하여 개체의 동적 컬렉션을 만들고, 개체 유형에 따라 동작을 조정하고, 코드 유연성을 높이는 방법을 보여줍니다.
C++의 다형성: 유연성과 확장성을 위한 강력한 도구
개요
다형성은 객체 지향 프로그래밍(OOP)의 기본 원칙으로 다양한 방법이 사용됩니다. 파생 클래스 객체가 기본 클래스와 다르게 동작하도록 허용함으로써 이를 수행합니다.
다형성 구현
C++에서는 가상 함수와 가상 테이블을 사용하여 다형성을 구현할 수 있습니다. 가상 함수는 파생 클래스에서 기본 클래스 함수를 재정의할 수 있도록 하는 함수입니다. 가상 테이블은 가상 함수 주소에 대한 포인터를 보유하는 테이블입니다.
가상 함수
class Base { public: virtual void display() { cout << "Base class display function" << endl; } }; class Derived : public Base { public: virtual void display() override { cout << "Derived class display function" << endl; } };
위 예에서 Base
클래스의 display
함수는 파생 클래스 Derived
의 가상 함수입니다. > 다뤄졌습니다. Base
类的 display
函数是虚函数,在派生类 Derived
中被覆盖。
虚表
虚表包含指向 Base
类和 Derived
类的 display
函数地址的指针:
class Base { public: virtual void display() { cout << "Base class display function" << endl; } }; class Derived : public Base { public: virtual void display() override { cout << "Derived class display function" << endl; } }; int main() { Base* ptr = new Derived(); // 指向 Derived 对象的 Base 类指针 ptr->display(); // 调用 Derived 类中的 display 函数 }
在上述示例中,尽管我们使用的是 Base
类指针,但该指针实际指向派生类 Derived
的一个对象。当调用 display
函数时,它会根据指向的实际对象类型动态查找并调用适当的函数。
实战案例:形状类层次结构
考虑一个形状类层次结构,其中有 Shape
基类和 Circle
和 Rectangle
派生类。Shape
类具有计算面积的虚函数。
class Shape { public: virtual float area() = 0; // 纯虚函数 }; class Circle : public Shape { public: Circle(float radius) : mRadius(radius) {} float area() override { return 3.14 * mRadius * mRadius; } private: float mRadius; }; class Rectangle : public Shape { public: Rectangle(float width, float height) : mWidth(width), mHeight(height) {} float area() override { return mWidth * mHeight; } private: float mWidth; float mHeight; };
在主函数中,我们可以使用 Shape
类指针来存储不同形状对象的引用,并调用 area
가상 테이블
가상 테이블에는Base
클래스와 Derived
클래스의 display
함수 주소에 대한 포인터가 포함되어 있습니다. int main() { Shape* shapes[] = {new Circle(5), new Rectangle(10, 5)}; for (Shape* shape : shapes) { cout << "Area: " << shape->area() << endl; } return 0; }위의 예에서는
Base
클래스 포인터를 사용하고 있지만 포인터는 실제로 파생 클래스 Derived
의 개체를 가리킵니다. display
함수가 호출되면 가리키는 실제 객체 유형을 기반으로 적절한 함수를 동적으로 조회하고 호출합니다. 🎜🎜🎜실용 사례: 모양 클래스 계층 구조🎜🎜🎜 Shape
기본 클래스와 Circle
및 Rectangle
파생이 있는 모양 클래스 계층 구조를 고려해보세요. 수업. Shape
클래스에는 면적 계산을 위한 가상 함수가 있습니다. 🎜rrreee🎜주 함수에서 Shape
클래스 포인터를 사용하여 다양한 모양 개체에 대한 참조를 저장하고 area
함수를 호출하여 해당 영역을 계산할 수 있습니다. 🎜rrreee🎜🎜 결론 🎜🎜🎜C++의 다형성은 뛰어난 유연성과 확장성을 제공합니다. 실제 유형에 따라 동작을 조정할 수 있는 동적 객체 컬렉션을 생성할 수 있습니다. 이를 통해 프로그래머는 유지 관리가 용이하고 확장하기 쉬운 코드를 만들 수 있습니다. 🎜위 내용은 C++의 다형성은 유연하고 확장 가능한 코드를 만드는 데 어떻게 도움이 됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!