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 を作成したのは、calcDinamica* cal; のようなポインターを持てるようにするためだけです。calc= new calcolatrice < matrix > のように作成します。これは、QT で電卓を使用しているときに、操作するオペランドの種類 (ベクトルや行列など) を変更できるためです。

わかりました、これは機能しますが、calcDinamica のポインターを使用して多くの dynamic_cast を実行せずに、 calcolatrice 内のデータを返したいと考えています。どうすればできますか、それとも不可能ですか?それが不可能な場合は、基本クラスのこのオプションを残して、3 つの異なるカルコラトリスを作成するだけです。

前もって感謝します。

4

2 に答える 2

0

Maybe you should add "template<class T>" before "class calcDinamica" and add "<T>" after "class calcolatrice:public calcDinamica"

于 2012-06-09T13:09:28.123 に答える
0

複数の型を扱う場合は、すべての型の式に対して単一の基本クラスを実装し、それを AST で使用して、評価されるすべての式に対して型チェックを実行する必要があります。

于 2012-06-09T14:24:04.663 に答える