> 백엔드 개발 > C++ > C에서 추상 클래스의 벡터를 만들 수 있습니까?

C에서 추상 클래스의 벡터를 만들 수 있습니까?

Mary-Kate Olsen
풀어 주다: 2024-12-02 07:41:14
원래의
420명이 탐색했습니다.

Can You Create a Vector of Abstract Classes in C  ?

C의 추상 클래스 벡터: 입문서

C에서 추상 클래스는 구현 없이 인터페이스를 정의하는 방법을 제공하여 파생 클래스를 허용합니다. 특정 동작을 상속하고 구현합니다. 그러나 인터페이스를 직접 인스턴스화할 수 있는 C#과 달리 C의 추상 클래스는 인스턴스화할 수 없습니다.

문제

다음 C 예제를 고려하세요.

class IFunnyInterface
{
public:
    virtual void IamFunny() = 0;
};
로그인 후 복사

이 추상 클래스는 IamFunny라는 단일 메서드가 있는 인터페이스를 나타냅니다. 이제 다음과 같이 이 인터페이스를 구현하는 객체의 벡터를 생성한다고 가정해 보겠습니다.

std::vector<IFunnyInterface> funnyItems;
로그인 후 복사

이 코드는 다음과 같은 컴파일러 오류를 발생시킵니다.

error C2259: 'IFunnyInterface' : cannot instantiate abstract class
로그인 후 복사

이 오류 이는 C가 추상 클래스의 인스턴스화를 허용하지 않기 때문에 발생합니다.

A 해결 방법

한 가지 해결 방법은 구현되지 않은 메서드를 호출하려고 할 때 예외를 발생시키는 구체적인 클래스로 추상 클래스를 바꾸는 것입니다.

class IFunnyInterface
{
public:
    virtual void IamFunny()
    {
        throw new std::exception("not implemented");
    }
};
로그인 후 복사

이 해결 방법은 벡터 인스턴스화를 허용하지만 , 잠재적인 함정이 발생합니다. IFunnyInterface 객체의 메서드에 액세스하려고 시도하는 코드는 예외.

대체 솔루션

더 우아한 솔루션은 추상 클래스에 대한 포인터 벡터를 사용하는 것입니다.

std::vector<IFunnyInterface*> ifVec;
로그인 후 복사

이 접근 방식은 다음과 같습니다. 다형성 동작을 위해 직접 값 저장 시 발생할 수 있는 객체 슬라이싱 문제를 방지합니다.

이해함으로써 C의 추상 클래스 인스턴스화에 대한 제한 사항이 있으므로 적절한 해결 방법을 사용하거나 대안을 사용하여 코드에서 원하는 기능을 달성할 수 있습니다.

위 내용은 C에서 추상 클래스의 벡터를 만들 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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