2011-01-14 9 views
0

나는 이것이 가능하다고 생각하지 않지만, 그렇다면 아주 유익하다는 것을 알게 될 것이다.기본 클래스를 파생 기본 클래스로 초기화 하시겠습니까?

사용자가 페인트 이벤트를 수행하는 Gui API를 만들고 있습니다. Numeric TextBox를 만들고 싶습니다. 글쎄, TextBox로부터 상속받는 것은 좋은 습관으로 보일뿐입니다. 이 문제는 사용자가 다음 그냥 그리기 내 기본 방법을 부를 것이다

TextBox::paint(); 

때문에 텍스트 상자에 대한 페인트 이벤트를 다시 구현 붙어 있다는 것입니다.

모든 TextBox 파생 상품을 유지 관리해야하는 경우 성가신 일입니다.

이 문제를 해결할 수있는 방법이 있습니까?

내 TextBox가 사각형을 그립니다. 그러면 숫자 부분이 원을 추가하지만 TextBox에서 파생 된 사용자의 텍스트 상자는 삼각형을 그립니다. 숫자 하나는 TextBox에서 파생되므로 삼각형이되도록합니다. 원.

감사

+0

질문이 명확하지 않지만 브리지 패턴의 변형을 적용해야하는 것처럼 들립니다. –

답변

1

내가 말했듯이 브리지 패턴은 실제로 원하는 것입니다.하지만 NumericField의 기본 클래스 인 사용자 클래스를 삽입하려고하므로이 패턴은 다음과 같습니다. :

template < typename Base = TextField > 
struct NumericField : Base 
{ 
... 
    void paint() { Base::paint(); draw_circle(); } 
}; 

이제 사용자는 NumericField<> 사용할 수 또는 그들이 자신의 클래스를 삽입 할 수 :

struct UserField : TextField 
{ 
    ... 
    void paint() { draw_triangle(); } 
}; 
NumericField<UserField> my_field; 

다리의 대답은 더욱 그렇다과 같습니다

많은 정보가 누락되었지만 이야기가 될 것입니다.

0

는 전자가 특정 문자의 입력을 할 수 있습니다 NumericTextBox와 텍스트 상자 사이의 유일한 차이 아닌가? 다르게 페인트하고 싶습니까?

+0

요점은 사용자의 페인트 이벤트가 아니라는 것입니다. theyd가 할 수 있어야합니다. public UserTextBox – jmasterx

+0

무엇을 의미합니까? UserTextBox는 어디에서 왔습니까? 사용자가 생성하는 인스턴스의 이름입니까? 사용자가 원하는 경우 NumericTextBox를 만들고 TextBox 인 것처럼 NumericTextBox를 사용합니다. TextBox로 선언했지만 NumericTextBox를 인스턴스화하면 페인트가 합리적인 API에서 가상으로 나타나므로 제대로 작동합니다. –

+0

내 TextBox가 사각형을 그립니다. 숫자 부분이 원을 추가하지만 TextBox에서 파생 된 사용자의 텍스트 상자는 삼각형을 그립니다. 숫자 상자는 TextBox에서 파생되므로 삼각형, 원이됩니다. – jmasterx

0

나는 당신이 의미하는 바를 잘 모르겠습니다. 귀하의 질문은 분명하지 않습니다.

제목이 기본 클래스 이니셜 라이저 또는 생성자를 호출하는 방법을 묻는 것 같습니다. 은 원하는 것입니까?

이것이 원하는 경우 다음과 같습니다.

class TextBox 
{ 
    public: 
    TextBox() { } 
    virtual ~TextBox() { } 

    virtual Paint() { } 
}; 

class NumericTextBox : public TextBox 
{ 
    public: 
    NumericTextBox() : TextBox() { } 
    ~NumericTextBox() { } 

}; 

TextBox :: Paint 및 기타 메서드의 기본 클래스가 소멸자뿐만 아니라 가상으로 선언되어 있는지 확인하십시오.

+0

미안하지만 이것은 내가 의미하는 바가 아니므로, 파생 된 A()로 A()를 초기화 할 수 있다면 기본 * = new 파생과 같은 것을 의미합니다. – jmasterx

관련 문제