udvidet spørgsmål til lommeregner

Tags:    c++

<< < 12 > >>
hej igen

det her spørgsmål er bare en opfølgning på lommeregnerspørgsmålet stillet tidligere. som nævnt tidligere har jeg puttet de forskellige operatorer ind i hver deres klasse. lommeregneren kan så ved hjælp af objekter af typen Num regne den nye værdi ud. jeg får nu til opgave at regne følgende udtryk ud 2/(3+4). regnestykket 3+4 regner jeg ud ved hjælp af min plus klasse som ser således ud:

class BinOp
{
class Plus
{
public:

*Plus(Num* num1,Num* num2):value(num1->eval()+num2->eval())
{

}
double Get() {return value;}

private:
double value;
};
};
i main kommer det så til at se således ud:

Num num2(2);
Num num3(3);
Num num4(4);

BinOp::Plus plus3_4(&num3,&num4);

problemet opstår når jeg skal dividere udtrykket. der skal jeg i main have et udtryk der ser således ud:

BinOp::Div div2_7(&num2,&plus3_4);

problemet er bare plus3_4 er ikke af typen Num, men af plus, så jeg får følgende compile error:

no matching function for call to `BinOp::Div::Div(Num*, BinOp::Plus*)'

candidates are: BinOp::Div::Div(Num*, Num*)

indtil videre har jeg ikke kunne finde en løsning på problemet. jeg har prøvet om kan kunne kaste en if sætning , men har ikke haft held med det. hvis der er nogen der har et forslag til hvordan man få klassen til at regne med nummerværdier (Num) og operator værdier (Plus,Minus,gange og dividere), vil jeg meget gerne høre det.

hilsen james



Du skal netop erklære tostring() i alle de class'er der arver fra Expr, på samme måde som eval funktionen.

Jeg ved dog ikke helt hvad den skal lave, hvordan skal strengen se ud?



<< < 12 > >>
t