Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  4 2408
Lærer meg å kode så driver derfor å løser enkle mattestykker fordi det virker som en fin start. Lurer på et par ting: Er det noe som burde vært plassert annerledes? Gjør jeg noe unødvendig? Neste steg blir å lage et program som lar meg velge hvem av utregningene jeg trenger, slik at jeg får samlet alle programmene mine i ett program. Tenker å lage en klasse til hver av disse utregningene. Høres det ut som en vettug plan?

All hjelp tas i mot med stor takk

Kode

//This program calculates the area of a triangle with known values(b,h)
#include <iostream>
using namespace std;

class Triangle{
    int base, height;
    public:
    void set_values(int, int);
    int area() {return (base/2)*height;}
};

void Triangle::set_values (int b, int h) {
    base = b;
    height = h;
}

int main() {
    Triangle tri;

    int b, h;
    cout << "Please enter base: ";
    cin >> b;
    cout << "Please enter height: ";
    cin >> h;
    tri.set_values (b,h);
    cout << "area: " << tri.area();
    return 0;
}
p.s dette er ikke en skoleoppgave eller noe sånt, vil bare lære meg å kode og er usikker.
Sist endret av nobo; 18. august 2017 kl. 20:09.
heltallsdivisjon (deling med int som datatype) gir nok ikke helt de resultatene du forventer. Forsøk f.eks å regne arealet med b=5 og h=2 med koden du har nå. Du blir nødt til å finne en datatype som støtter desimaltall. Det ser også ut som du ikke har lært om konstruktører enda. det kan være nyttig, men da må man også lære om heap/stack-allokering osv, så er kanskje greit å vente med litt til. https://www.tutorialspoint.com/cplus...destructor.htm
En klasse per utregning høres ikke ut som en god løsning. En klasse bør være en modul som kan fjernes uten at det påvirker andre ting. Jeg ville brukt en klasse per geometriske form, og dersom flere deler samme matematiske konsepter, lagd et interface og implementert disse i klassene som trenger/bruker dette. Omkrets og areal er typiske eksempler på funksjoner som bør være en del av et interface, og implementeres forskjeliig for hver klasse(geometriske form).

Edit: for å ta det litt videre, kan du også se på arv for egenskaper. Et kvadrat kan f.eks arve fra rektangelklassen og override funksjoner, det bør være en fin øvelse i å forstå hvorfor det er nyttig med klasser og arv.
Sist endret av Xasma; 18. august 2017 kl. 21:44.
Vanlig å definere klasser i header (et slags interface (hvis du er kjent med java) med tanke på planleggingsstadie.

Ellers ser du hvordan jeg ville gjort det.

HTML-kode

class Triangle{
    private:
    
    float base;
    float height;
    
    public:
    
    Triangle (float base, float height){
        this->base    = base;
        this->height  = height;
    }
    void changeBase(int base){
        this->base = base;
    }
    
    void changeHeight(int height){
        this->height = height;
    }
    
    ~Triangle();
    float area() {return (base/2)*height;}
};

HTML-kode

#include <iostream>
#include "Triangle.h"
using namespace std;

int main()
{
   Triangle* tri = new Triangle(3,10);
   cout << tri->area() << endl; 
   
   return 0;
}
Sitat av nobo Vis innlegg
Lærer meg å kode så driver derfor å løser enkle mattestykker fordi det virker som en fin start. Lurer på et par ting: Er det noe som burde vært plassert annerledes? Gjør jeg noe unødvendig?
Vis hele sitatet...
En ting som ikke er feil, men som virker litt rart, er at du har definert metodene til Triangle-klassen på to forskjellige måter. Triangle har en metode area() og en metode set_values(), men der førstnevnte er definert inne i Triangle-klassen, er sistnevnte deklarert innenfor og definert utenfor.

Dette har ingen funksjonell betydning, for begge er definert som metoder i Triangle, men det er litt inkonsekvent og pussig kodestil å bruke begge deler om hverandre slik. Så lenge du definerer alt i samme fil, vil det i min mening være ryddigst å definere alt inne i klassen.