2012-09-23 4 views
0

C++에서 여러 개의 순수 가상 메서드로 추상 클래스를 만드는 것이 좋은지 알고 싶습니까?C++에서 큰 추상 클래스를 갖는 것이 좋거나 안좋은가요?

예를 들어 세션 초기화 프로토콜의 대화 상자 구현과 같은 일부 상황에서는 브리지 패턴을 사용하여 구현할 수 있음을 발견했습니다. 그러나 일반적인 작업에 대한 추상 기본 클래스를 갖는 것은 매우 큰 추상 클래스를 갖게됩니다. 퍼포먼스 관점에서 그런 클래스를 사용하고 구현하는 효과는 무엇입니까?

각각의 대화 상자마다 고유 한 구현이 있다는 점을 고려해보십시오. (예 : InviteDialog, RegisterDialog, InfoDialog, ...)

적용 브리지 패턴 : 무시 구현

class IIDialog{ 
public: 
/*there are multiple pure virtual methodes at least 15*/ 
virtual int32_t SendResponse(ISipMessage* response) = 0; 
protected: 
/*there are multiple methods that use pure virtual methods*/ 
int32_t Send_Response(){retun SendResponse(response);} 
} 

class IInviteDialog : public IIDialog 
{ 
/*Implemet virtual methods*/ 
} 

class IRegisterationDialog : public IIDialog 
{ 
/*implement virtual methode*/ 
} 

다른 부분 (위의 클래스에 의해 사용되는 구현을위한 실제 구현 및 초록)

감사

성능보기에서
+0

큰 클래스를 갖는 것이 디자인의 관점에서 나쁘지는 않지만 추상 적이거나 그렇지 않은 경우가 많습니다. – juanchopanza

+0

과 그 오버 헤드에 대해 강조한 경우 24/7 서버 *를 사용하면 한 달 동안 약 2-3 초의 CPU 시간을 절약 할 수 있습니다. 나는 당신이 큰 vtable 배치가있는 경우에, 당신이 그 큰 vtable가 첫번째 장소에있는 지옥과 같은 왜 그 몇 초를 절약하는지에 관해 강조 할 더 중요한 것을 가지고 있다고 확신 할 수 있습니다. – WhozCraig

+0

디자인의 시작 부분에서 상속을 사용하여 이러한 클래스를 구현하기로 선택했습니다. 상속을 사용하면 클래스 클라이언트가 형을 파생시킬 때마다 클래스 클라이언트를 차단하는 typecasting.for 클래스 클라이언트를 만들 수 있습니다. .in 다리 패턴 우리 공통점 및 variation.by이 공통점에서 작업의 매우 큰 숫자를 발견 할 필요가 식별해야합니다. 나는 Gof 책을 기반으로 추상 클래스에서 일반적인 작업을해야합니다. 나는 당신의 제안이 무엇인지 알고 싶습니까? –

답변

1

대부분의 최신 C++ 컴파일러에서 객체를 구성 할 때 성능 오버 헤드가 가상 메소드의 수에 의존하지 않는다고 가정 할 수 있습니다.

실제로 메서드를 호출 할 때 오버 헤드가 다른 구현 방법의 오버 헤드보다 크지 않을 것으로 예상됩니다.

그리고 이러한 함수 호출이 네트워크 작업과 같은 "복잡한"작업을 수행하는 경우 이러한 미세 최적화에 대해서는 별다른 신경을 쓸 필요가 없으며 완전히 관련이 없습니다.

+0

정말 고마워요. –

0

, 가상 메소드의 수는 C++에서 중요하지 않습니다합니다 (내가 지불 할 작은 일정한 가격이있다 방법의 수에 관계없이 방향 지정).

+0

빠른 답장을 보내 주셔서 감사합니다. –