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

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

Barbara Streisand
풀어 주다: 2024-11-27 17:22:12
원래의
248명이 탐색했습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿