我的項目有一些問題。下面是一些代碼:從基類和返回類型的模板繼承
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只允許我有一個像calcDinamica * cal指針;然後創建它:calc = new calcolatrice < matrix>,因爲當我用QT使用計算器時,我可以改變我想操作的操作數的類型(如向量或矩陣)。
好的,這個工作,但我想返回calcolatrice內的數據,而不用calcDinamica的指針做很多dynamic_cast。 我該怎麼做,還是不可能?因爲如果不可能的話,我最好離開基類的這個選項,並且創建3個不同的calcolatrice。
在此先感謝。
Thx,但不,如果我這樣做,基類的目的將會丟失,並且它變得毫無用處。這個純粹的基類的唯一目的是我可以聲明一個沒有T類型的指針,例如:calcDinamica * test;然後當我知道我想要使用什麼類型時,例如,使用test = new calcolatrice < matrix >創建新項目。然後,如果我使用test-> somma();它的工作原理,但我無法找到一種方法來檢索數據裏面沒有做一個「測試」指針dynamic_cast。我想找到一種像somma()這樣的類似方法的方法,能夠讓我回到calcolatrice的私有數據。 – user1446020
好的,我知道。嘗試'類calcDinamica { public: virtual void somma()= 0; virtual void creaPrimo()= 0; template virtual T * ritornaPrimo()const {cout <<「errore」<< endl;}; //這就是我想要的 virtual〜calcDinamica(){}; };' –
CodeSun
我已經嘗試過了,可悲的是:錯誤:模板可能不是'虛擬'的。 :( – user1446020