>백엔드 개발 >C++ >추상 클래스의 `std::벡터`를 만들 수 없는 이유는 무엇입니까?

추상 클래스의 `std::벡터`를 만들 수 없는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-27 17:22:12235검색

Why Can't I Create a `std::vector` of Abstract Classes?

std::Vector

객체 지향 프로그래밍에서 추상 클래스는 다른 클래스가 상속할 수 있는 청사진 역할을 합니다. 그러나 불완전한 특성으로 인해 직접 인스턴스화할 수는 없습니다. 이 제한은 추상 클래스의 std::벡터 선언으로 확장되어 "추상 클래스를 인스턴스화할 수 없습니다."라는 오류를 발생시킵니다.

추상 클래스 문제

추상 클래스는 순수 가상으로 선언됩니다. 구현이 없는 함수. 이는 객체로 생성될 수 있는 구체적인 엔터티가 아니라는 의미입니다. 대신 상속되고 해당 추상 함수가 하위 클래스에 구현됩니다.

해결 방법

이 문제를 극복하기 위한 두 가지 주요 해결 방법이 있습니다.

  1. 추상 클래스에 대한 포인터 벡터:
    추상 클래스의 std::벡터를 사용하면 추상 클래스에 대한 포인터의 std::벡터를 사용할 수 있습니다. 이를 통해 다형성 동작을 유지하면서 하위 클래스의 인스턴스를 저장할 수 있습니다.

    std::vector<IFunnyInterface*> ifVec;
  2. 파생 클래스 벡터:
    추상 클래스를 사용하는 대신 추상 클래스에서 상속하고 모든 가상 함수의 구체적인 구현을 제공하는 파생 클래스를 만들 수 있습니다. 그런 다음 이 파생 클래스의 std::Vector를 선언할 수 있습니다.

    class FunnyDerived : public IFunnyInterface
    {
        // Implement abstract function
    };
    
    std::vector<FunnyDerived> fdVec;

결론

std::Vectors 생성을 제한하는 것이 직관에 어긋나는 것처럼 보일 수 있지만 추상 클래스 중에서 이는 객체 지향 프로그래밍의 기본 측면입니다. 추상 클래스 또는 파생 클래스에 대한 포인터 사용을 수용함으로써 추상 클래스의 제한 사항을 준수하면서 유연성과 다형성을 유지할 수 있습니다.

위 내용은 추상 클래스의 `std::벡터`를 만들 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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