2012-06-09 3 views
0

내 프로젝트에 몇 가지 문제가 있습니다. 여기에 몇 가지 코드는 다음과 같습니다기본 클래스 및 반환 유형에서 템플릿 상속

class calcDinamica 
{ 
public: 
    virtual void somma() =0; 
    virtual void creaPrimo() =0; 
    virtual T* ritornaPrimo()const{cout<<"errore"<<endl;};//THIS is what i want 
    virtual ~calcDinamica(){}; 
}; 

template<class T> 
class calcolatrice:public calcDinamica 
{ 
private: 
    T* primoVett; //first operand 
    T* secondoVett; //second operand 
    T* risultatoVett; //result 
public: 
    calcolatrice():primoVett(0), secondoVett(0), risultatoVett(0){}; 
    virtual void creaPrimo(){primoVett= new T;}; 
    virtual void creaSecondo(){secondoVett= new T;}; 
    virtual void creaRisultato(){}; 
    virtual void somma() 
    { 
     risultatoVett=new T; 
     *risultatoVett=*primoVett+*secondoVett; 
    }; 
    virtual T* ritornaPrimo()const{cout<<"giusto"<<endl;return primoVett;}; 
}; 

이 코드는 계산기를, 내가 다른 3 개 가지 수업을하고, 내가 구현하고 있기 때문에 내가 위의 게시 전용이 클래스는, 내가 세션 중에 생성 된 데이터를 추적 할 이것 QT와.

그래서 저는 calcDinamica * cal과 같은 포인터를 가질 수 있도록이 기본 CalcDinamica를 만들었습니다. QT와 함께 계산기를 사용할 때 벡터 나 행렬과 같이 연산하고자하는 피연산자 유형을 변경할 수 있기 때문에 다음과 같이 작성하십시오 : calc = new calcolatice < 행렬>.

좋아,이 작동하지만 calcDatamica 포인터로 dynamic_cast 많이 수행하지 않고 calcolatrice 안에 데이터를 반환 할 싶어요. 어떻게 만들 수 있습니까, 아니면 불가능합니까? 왜냐하면 불가능하다면 기본 클래스의이 옵션을 남겨두고 더 나은 3 개의 calcolatrice를 생성하는 것이 좋습니다.

미리 감사드립니다.

답변

0

은 아마 당신은 "class calcDinamica"전에 "template<class T>"를 추가하고 여러 종류로 작업하는 경우 "class calcolatrice:public calcDinamica"

+0

Thx, 아니요, 이렇게하면 기본 클래스의 목적이 손실되어 쓸모 없게됩니다. 그 순수한 기본 클래스의 유일한 목적은 T 타입이없는 포인터를 선언 할 수 있다는 것입니다 : calcDinamica * test; 그리고 내가 어떤 유형을 사용하는지 알고있을 때, 예를 들어 test = new calcolatrice < matrix >으로 새 항목을 만듭니다. 그럼, 만약 내가 사용 test-> somma(); 그것은 작동하지만, "test"포인터에 dynamic_cast를 수행하지 않고 데이터를 검색하는 방법을 찾을 수 없습니다. somma()와 비슷한 방법을 사용하여 calcolatrice의 개인 데이터를 다시 제공 할 수있는 방법을 찾고 싶습니다. – user1446020

+0

오케이, 알아. Try 'class calcDinamica { public : 가상 공백 somma() = 0; 가상 공극 creaPrimo() = 0; 템플릿 가상 T * ritornaPrimo() const {cout << "errore"<< endl;}; //이게 내가 원하는 것이다 virtual ~ calcDinamica() {}; }; – CodeSun

+0

나는 그것을 슬프게 이미 시도했다 : 오류 : 템플릿이 '가상'이 아닐 수도있다. :( – user1446020

0

, 당신은 모든 유형 및 사용의 표현을위한 하나의 기본 클래스를 구현해야합니다 후 "<T>"를 추가한다 그 AST에서, 그리고 평가 된 모든 표현식에 대해 유형 검사를 수행하십시오.