다른 클래스의 용기에 다형성 방법을 사용하는는 어떻게 두 클래스 아래와 같이이
std::vector<Plot*> plot_vector;
plot_vector.append(new DynamicPlot());
plot_vector.append(new DynamicPlot());
plot_vector.append(new StaticPlot());
plot_vector.append(new StaticPlot());
그리고 난 경우) (update_real_time를 호출 할 인스턴스의 유형은 DynamicPlot입니다.
foreach(Plot *plot, plot_vector)
{
if(/* plot type == DynamicPlot */)
{
plot->update_real_time();
}
plot->plot();
}
여기에 어떤 패턴을 사용해야합니까? 빈 update_real_time() 메소드를 StaticPlot 클래스에 추가하는 것은 좋은 해결책이 아닌 것처럼 보입니다.
편집 : 위 코드는 실제 정보가 아닙니다. 나는 문제를 알리기 위해 그것을 썼다. 그것을 의사 코드 (psuedo code)라고 생각한다. 나는 액세스 한정자를 쓰는 것을 꺼려하지 않았다. 내 실제 코드에서는 개인 상속이나 슬라이싱 문제가 없습니다. 벡터의 인스턴스 포인터를 유지합니다. 오해해서 미안해. 나는 어쨌든 그것을 고치고있다.
두 가지 문제점 : 1) 상속이 비공개입니다. 2) 객체 조각. 전자는 수정하기가 쉽지 않습니다. 후자는'Plot' 객체 대신'Plot'에 포인터 (아마도 스마트 포인터)를 저장해야한다는 것을 의미합니다. 그것은 당신이 설명하는 문제를 해결하기 시작하기도 전에입니다. – juanchopanza
3) 가상 dtor 없음 (기본 클래스 포인터를 저장할 때 많은 문제가 있음). 객체를 슬라이스 할 때 현재 문제는 아니지만 포인터로 전환하면 문제가 될 가능성이 큽니다. – dyp
내 진짜 코드는 내가 위에서 쓴 것과 다르다. 나는 지금 내 문제를 설명하기 위해 그것을 썼다. 어쨌든 나는 고칠 것이다. –