두 추상 클래스 사이에 컴포지션 관계 (집계가 아닌)를 만들 수 있습니까?추상 클래스 간의 컴포지션
추상 클래스를 인스턴스화 할 수 없기 때문에 나는 그렇게 생각하지 않습니다. 그러나 아마도 그것을 할 수있는 간단한 방법이 있습니다.
두 추상 클래스 사이에 컴포지션 관계 (집계가 아닌)를 만들 수 있습니까?추상 클래스 간의 컴포지션
추상 클래스를 인스턴스화 할 수 없기 때문에 나는 그렇게 생각하지 않습니다. 그러나 아마도 그것을 할 수있는 간단한 방법이 있습니다.
예 : 당신은 추상적 인 유형에 대한 포인터를 가질 수 있습니다
class A
{
virtual ~A() = 0;
};
class B
{
virtual ~B() = 0;
A* mA;
};
.
다른 클래스에 대한 포인터 또는 참조를 사용할 수 있습니다. 예를 들어 :
는class A {
public:
virtual void m() = 0;
virtual ~A() { }
};
class B {
public:
virtual void m() = 0;
virtual ~A() { }
private:
boost::scoped_ptr<A> a;
};
C++ 11에서 대신 std::unique_ptr
를 사용할 수 있습니다. 이렇게하면 B
을 복사 할 수 없게 만듭니다. 이는 하위 유형 다형성을 사용하는 클래스에서 다소 일반적입니다.
a를 비공개 멤버로 선언했습니다. B는 추상이기 때문에 그것을 보호 된 것으로 선언하는 것이 아닌가? – Ale
A와 B 사이의 집계가 아닌가요? mA가 B 외부에 살고 있지 않습니까? mA의 수명에 대한 책임을 만들기 위해서는 B를 고려해야합니다. B :: ~ B {delete mA;} ... 맞습니까? (가상 ~ B() 및 가상 ~ B() = 0이 아님) – Ale
필요하지 않습니다. 책임은 논리적 인 것이다. B. 내부에서 mA를 만들지 않아도됩니다. 외부에서 할당하여 클래스 외부의 무언가에 책임을 위임 할 수 있습니다. –