STL 함수 객체는 다음과 같이 구현되는 다형성을 지원합니다. 가상 함수와 가상 상속을 사용하여 추상 기본 클래스와 파생 클래스를 정의합니다. 각 파생 클래스에 대해 특정 버전의 함수를 정의합니다. 구체적인 클래스를 알고리즘에 매개변수로 전달합니다.
STL 함수 개체가 다형성을 지원하나요?
표준 템플릿 라이브러리(STL)의 함수 개체는 런타임 다형성을 지원하므로 프로그램 실행 중에 호출할 함수를 동적으로 결정할 수 있습니다.
구현 방법:
가상 함수와 가상 상속을 이용하여 다형성 함수 객체를 구현할 수 있습니다.
코드 예:
순수 가상 함수area()
를 사용하여 추상 기본 클래스Shape
가 정의된 다음 예를 생각해 보세요.Shape
,具有一个纯虚函数area()
:
struct Shape { virtual double area() const = 0; };
派生自Shape
的具体类,例如Circle
和Square
,定义了其特定版本的area()
函数:
struct Circle : public Shape { double radius; Circle(double radius) : radius(radius) {} double area() const override { return M_PI * radius * radius; } }; struct Square : public Shape { double side_length; Square(double side_length) : side_length(side_length) {} double area() const override { return side_length * side_length; } };
可以使用函数对象将这些具体类作为参数传递给算法:
std::vectorshapes{new Circle(2), new Square(3)}; double total_area = 0; for (const auto& shape : shapes) { total_area += shape->area(); } std::cout << "Total area: " << total_area << std::endl;
在这个示例中,即使shapes
存储的是不同的Shape
派生类的指针,多态函数对象也会调用正确的area()
rrreee
Circle
및
Square
와 같은
Shape
의 구체적인 클래스에서 파생되어
area()
의 특정 버전을 정의합니다. 함수:
rrreee함수 개체를 사용하여 이러한 구체적인 클래스를 알고리즘에 대한 인수로 전달할 수 있습니다.rrreee
이 예에서는shapes
가 다른
Shape
에 대한 포인터를 저장하더라도 > 파생 클래스인 경우 다형성 함수 객체는 올바른
area()
함수도 호출합니다.
위 내용은 STL 함수 객체는 다형성을 지원합니까? 달성하는 방법?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!