Avatar billede wix Nybegynder
13. marts 2005 - 18:01 Der er 7 kommentarer og
1 løsning

Design af program, objekter mv.

Hej,
Jeg er ved at lave et program, som regner på nogle kemikalier. Fx. fastslå frysepunk for en blanding af 10 kemikalier. Beregningen foretages ved at benytte en masse oplysninger om de enkelte kemikalier, fx. kogepunkt, molvægt, smeltevarme osv. Nogle af disse værdier kender jeg og henter dem i en tabel, andre regner jeg ud på bagrrund af molvægten. Jeg overvejer at benytte en "kemikalieklasse" istedet for en masse arrays, som jeg gør idag. Er det en god ide?

I mit program bestemmer/henter jeg alle værdier, for alle kemikalier, inden jeg begynder at regne.

Hvordan ville en sådan klasse se ud, med et eksempel tak? Det med de modelleret værdier er jeg spændt på. Lad os sige at smeltevarmen er lig 10 * kvardratroden af molvægten.

Mvh,
Christian
Avatar billede arne_v Ekspert
13. marts 2005 - 18:32 #1
Du laver en klasse med private attributter for de egenskaber som ikke kan
beregnes og public metoder til at hente egenskaber fra attributter og
beregne de egenskaber som skal beregens.

Og eventuelt en abstrakt basisklasse med nogle virtuelle metoder.
Avatar billede wix Nybegynder
13. marts 2005 - 19:48 #2
Jeg forstår ikke "abstrakt basisklasse med nogle virtuelle metoder". Jeg må bede om et eksempel.
Avatar billede bertelbrander Novice
13. marts 2005 - 20:12 #3
Så vidt jeg kan se har alle kemikalier de samme sæt af egenskaber? Dvs alle har et kogepunkt, men kogepunktet er forskelligt for hver kemilalie?

Disse egenskaber er faste for et givent kemikalier og dermed for en instans af en klassen?

I så fald ville jeg sætte parametrene i konstructoren og beregne resten i denne.

Og lave en enum med kemikalierne samt lave et array hvor man bruger denne enum som index.
Avatar billede arne_v Ekspert
13. marts 2005 - 20:14 #4
Eksempel:

#include <iostream>
#include <string>
#include <vector>

using namespace std;

class Substans
{
    private:
        double vol;
    public:
        Substans(double vol) { this->vol = vol; };
        virtual string GetNavn() = 0;
        virtual string GetSymbol() = 0;
};

class Vand : public Substans
{
    public:
    Vand(double vol) : Substans(vol) { };
    virtual string GetNavn() { return "Vand"; };
    virtual string GetSymbol() { return "H2O"; };
};

class Svovlsyre : public Substans
{
    public:
    Svovlsyre(double vol) : Substans(vol) { };
    virtual string GetNavn() { return "Svovlsyre"; };
    virtual string GetSymbol() { return "H2SO4"; };
};

int main()
{
    vector<Substans*> mix;
    mix.push_back(new Vand(0.5));
    mix.push_back(new Svovlsyre(0.5));
    for(int i = 0; i < mix.size(); i++) cout << mix[i]->GetNavn() << " " << mix[i]->GetSymbol() << endl;
    return 0;
}
Avatar billede arne_v Ekspert
13. marts 2005 - 20:52 #5
Eller hvis vol skal bruges til noget:

#include <iostream>
#include <string>
#include <vector>

using namespace std;

class Substans
{
    private:
        double vol;
    public:
        Substans(double vol) { this->vol = vol; };
        double GetVol() { return vol; };
        virtual string GetNavn() = 0;
        virtual string GetSymbol() = 0;
};

class Vand : public Substans
{
    public:
    Vand(double vol) : Substans(vol) { };
    virtual string GetNavn() { return "Vand"; };
    virtual string GetSymbol() { return "H2O"; };
};

class Svovlsyre : public Substans
{
    public:
    Svovlsyre(double vol) : Substans(vol) { };
    virtual string GetNavn() { return "Svovlsyre"; };
    virtual string GetSymbol() { return "H2SO4"; };
};

int main()
{
    vector<Substans*> mix;
    mix.push_back(new Vand(0.5));
    mix.push_back(new Svovlsyre(0.5));
    for(int i = 0; i < mix.size(); i++) cout << mix[i]->GetNavn() << " " << mix[i]->GetSymbol() << " " << mix[i]->GetVol() << endl;
    return 0;
}
Avatar billede wix Nybegynder
14. marts 2005 - 11:37 #6
Tak for hjælpen. Jeg forstår det nu.
Avatar billede wix Nybegynder
14. marts 2005 - 11:40 #7
Hej Arne,
Du må lige lave et svar.
// Chr.
Avatar billede arne_v Ekspert
14. marts 2005 - 11:48 #8
kommer her
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester