arvning af class

Tags:    c++

hej

jeg sidder med en opgave der giver mig nogle problemer. jeg skal oprette en class kaldet Expr. derefter skal jeg oprette en class kaldet Num. opgaven er indrettet således at Num class skal arve fra Expr klassen. altså:

class Expr
{
public:
...
}

class Num : public Expr
{
public:
...
}
dernæst skal jeg oprette et objekt kaldet Num5, som indeholder værdien 5 og skal returneres ved hjælp af eval funktionen nedenfor, for at teste om Num klassen virker. det gør jeg ved at sige i headerfilen:
class Expr
{
public:

virtual double eval()=0;

}

class Num : public Expr
{
public:

double value; //værdien som objektet skal returneres ved

Num(double num5);

virtual double eval();

}

i cpp filen har jeg skrevet følgende:

#include Num.h //navnet på headerfilen
#include <iostream>

using namespace std;

Num::Num(double num5)
{

value=num5;
cout<<"num5 ="<<num5<<endl;
}

double Num::eval()
{
return value;
}

int main()
{
Num num1(5);

system("PAUSE");
return 0;
}
herfra kan jeg godt få programmet til at virke, men i næste del i opgaven skal jeg teste Expr class ved at tildele objektet num5 til en Expr pointer expr5, og udskriv værdien, som returneres fra expr5->eval().

indtil videre har jeg ikke været i stand til at finde en løsning på opgaven, hvis der er nogen der ved noget, vil jeg meget gerne høre deres mening

hilsen james





Det er lidt svært at ræsonnere mig frem til hvad du mener udfra din beskrivelse af opgaven, men jeg tror at de vil have dig til at teste at din polymorfisme fungerer.

Du kan ikke oprette en instans af din superklasse. Det skyldes den ikke er fuldt implementeret, da den har pure virtual funktioner - MEN - du kan have en pointer, der er af samme type som din superklasse. Du kan så oprette en instans af din subklasse og sæt før nævnte pointer til at pege på den.

Expr * pBase = new Num(5);
double d = pBase->eval();

Du kalder nu funktionen på din superklasse, hvorefter kaldet via polymorfi bliver dispatched videre til din subklasse og værdien "5" fra din subklasse bliver returneret af din superklasse.

Hth



>

>Det er lidt svært at ræsonnere mig frem til hvad du mener >udfra din beskrivelse af opgaven, men jeg tror at de vil have >dig til at teste at din polymorfisme fungerer.

>Du kan ikke oprette en instans af din superklasse. Det >skyldes den ikke er fuldt implementeret, da den har pure >virtual funktioner - MEN - du kan have en pointer, der er af >samme type som din superklasse. Du kan så oprette en instans >af din subklasse og sæt før nævnte pointer til at pege på >den.

>Expr * pBase = new Num(5);
>double d = pBase->eval();

>Du kalder nu funktionen på din superklasse, hvorefter kaldet >via polymorfi bliver dispatched videre til din subklasse og >værdien "5" fra din subklasse bliver returneret af din >superklasse.

>Hth


Hej jess. tak for din besvarelse. jeg glemte at fortæle at det er en c++ opgave. jeg har fulgt dit råd og så vidt jeg forstod ud for din besvarelse har jeg prøvet at implementere dit eksempel på følgende måde:

class Expr
{
public:

virtual double eval()=0;

Expr*pBase;

};

class Num : public Expr
{
public:


double value;

Num(double num5);

virtual double eval();

Expr*pBase = new Num(5);

double d = pBase->eval();

};

problemet er, at når jeg kompiler får jeg følgende fejlmeddelser:

>`new' cannot appear in a constant-expression

>ISO C++ forbids initialization of member `pBase'

dette er blot 2 ud af i alt 10 fejl jeg får. hvis jeg har misfortolket din besvarelse eller gjordt noget forkert, vil jeg meget gerne høre fra dig.

hilsen james




Start med:

Fold kodeboks ind/udKode 


Det kompilerer og kører, hvis ikke det gør det du skal, putter vi/du det på bagefter.



>
Start med:

>
Fold kodeboks ind/udKode 


>Det kompilerer og kører, hvis ikke det gør det du skal, >putter vi/du det på bagefter.


Hej Bertel. tak for din besvarelse. jeg har gjordt som du har vist i dit eksempel, og jeg kan godt få det til at køre nu. tak for hjælpen.



t