kan maar niet begrijpen wat klassen zijn

Status
Niet open voor verdere reacties.

linketier

Gebruiker
Lid geworden
18 aug 2007
Berichten
30
wil iemand mij meschine uitleggen wat klassen zijn ?? ik weet dat ze bij O.O.P. behooren en dat je ze gebruikt om objects te crieëren .... , maar ik begrijp niet hoe ik ze moet schrijven of hoe ze werken ??
 
Begin bij iets simpelers als je het nog niet snapt. Als je het per se wilt leren zoek dan tutorials op.
(En leer alsjeblieft Nederlands schrijven :P)
 
hier een volledig gecomment voorbeeld
Code:
#include <iostream>
using namespace std;

struct change//in een struct is standaard alles public
    {
    //public://dit hoeft dus niet
    int mpchange;
    int hpchange;
    };
class mijnpoppetje//in een class is standaard alles private
    {
    private://kunnen alleen gebruikt worden door functies van deze class
        short int level;//declareer een private variabele

    protected://zelfde als private en kunnen ook gebruikt worden door friend functies
        short int hp;//declareer een protected variabele
        short int mp;//zelfde als hierboven

    public://kan je van overal gebruiken
        mijnpoppetje( int x = 0, int y = 0, int z = 0 )//een constructor, deze kun je gebruiken om variabelen
            { level = x; hp = y; mp = z; }//mee te geven bij de aanmaak van de class (zie main)

        ~mijnpoppetje()//een destructor, deze kun je gebruiken om variabelen in het dynamisch geheugen
            { /*destroy stuff here*/ }//te wissen

        mijnpoppetje mijnpoppetje::operator=( const mijnpoppetje& temp )//een operator, zie main voor het gebruik
            {
            level = temp.level;//ziedaar je mag hier wel de private aanroepen van een ander object van deze class
            hp = temp.hp;//deze begrijp je wel
            mp = temp.mp;//deze begrijp je wel
            }
        mijnpoppetje mijnpoppetje::operator+=( const change& temp )
            {
            hp += temp.hpchange;
            mp += temp.mpchange;
            }
        int GetLevel()//declaratie en
            {return level;}//impelementatie in de class zelf
        void SetLevel( int x )//declaratie en
            { level = x; }//impelementatie in de class zelf

        int Gethp();//declaratie in de class
        void Sethp( int x );//declaratie in de class

        int Getmp();//declaratie in de class
        void Setmp( int x );//declaratie in de class
    };

class mijnpoppetje2 : public mijnpoppetje
    {
    public:
        char naam[9];
        mijnpoppetje2( int x = 1, int y = 1, int z = 1 )//constructors worden niet meegenomen je moet dus een nieuwe maken
            { /*level = x;*/ hp = y; mp = z; sprintf(naam,"mijnnaam");//level is private die mag je zo dus niet setten
                (*this).SetLevel(x); }//zo mag het wel, (*this) staat voor de class die aangemaakt word
    };
int main()
    {
    mijnpoppetje ikke( 10, 50, 60 );
    mijnpoppetje iemandanders( 300, 700, 1500 );

    cout << "ikke na aanmaak" << endl;
    cout    << ikke.GetLevel() << endl
            << ikke.Gethp() << endl
            << ikke.Getmp() << endl;
    cout << endl;

    ikke.SetLevel( 25 );
    ikke.Sethp( 10 );
    ikke.Setmp( 15 );

    cout << "ikke na setters" << endl;
    cout    << ikke.GetLevel() << endl
            << ikke.Gethp() << endl
            << ikke.Getmp() << endl;
    cout << endl;
    //cout << ikke.naam;//dit kan niet, mijnpoppetje 2 krijgt de vars van de normale NIET andersom
                        //ikke heeft dus geen var die naam heet

    ikke = iemandanders;
    cout << "ikke na operator" << endl;
    cout    << ikke.GetLevel() << endl
            << ikke.Gethp() << endl
            << ikke.Getmp() << endl;
    cout << endl;

    change thischange;
    thischange.hpchange = -10;
    thischange.mpchange = 10;
    ikke += thischange;
    cout << "ikke na verandering" << endl;
    cout    << ikke.GetLevel() << endl
            << ikke.Gethp() << endl
            << ikke.Getmp() << endl;
    cout << endl;

    mijnpoppetje2 ikke2( 10 );//je hoeft maar 1 argument mee te geven aangezien alles een init waarde heeft, je stuurt altijd
                                //de 1e var, in dit geval dus x (welke we in level stoppen)
    cout << "ikke 2" << endl;
    cout << ikke2.naam << endl;
    cout    << ikke2.GetLevel() << endl//zie hier dat je level toch geset heb
            << ikke2.Gethp() << endl//en dat je de 2e constructor gebruikt
            << ikke2.Getmp() << endl;
    cin.get();
    return 0;
    }

int mijnpoppetje::Gethp()//implementatie buiten de class
    {
    return hp;
    }
void mijnpoppetje::Sethp( int x )//implementatie buiten de class
    {
    hp = x;
    }
int mijnpoppetje::Getmp()//implementatie buiten de class
    {
    return mp;
    }
void mijnpoppetje::Setmp( int x )//implementatie buiten de class
    {
    mp = x;
    }

de uitvoer hiervan is
Code:
ikke na aanmaak
10
50
60

ikke na setters
25
10
15

ikke na operator
300
700
1500

ikke na verandering
300
690
1510

ikke 2
mijnnaam
10
1
1
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan