Наследование шаблона от базового класса и возвращаемых типов
У меня есть некоторые проблемы с моим проектом. Вот некоторый код:
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
Хорошо, это работает, но я хочу вернуть данные внутри calcolatrice, не делая много динамических_кассет с указателем calcDinamica. Как я могу сделать это, или это невозможно? Потому что, если это невозможно, я лучше оставлю эту опцию в базовом классе и просто создаю 3 разных кальколатриса.
Заранее спасибо.
2 ответа
Может быть, вы должны добавитьtemplate<class T>
" до "class calcDinamica
" и добавить "<T>
" после "class calcolatrice:public calcDinamica
"
Если вы работаете с несколькими типами, вы должны реализовать единый базовый класс для выражений всех типов и использовать его в AST, а также выполнить проверку типов для всех вычисленных выражений.