C++ private Variablen einer Klasse

Ich habe bei C++ folgenden Beispielcode:
Code:
class klasse
{
private:
int variable;
public:
void setvar()
{
variable = 1;
}
void getvar()
{
cout<<variable;
}
}

Wenn ich jetzt eine Objekt erstelle und die Funktion getvar() aufrufe, bekomme ich für die Variable variable einen sehr hohen Wert angezeigt, der aber immer verschieden groß ist.
Warum?
Wenn ich zuerst setvar() und dann getvar() aufrufe, ist der Wert immer noch so hoch und nicht 1.
Nur wenn ich
Code:
void setvar()
{
cin<<variable;
}
benutze, wird die Variable verändert?
Warum ist das so?
PS: Ich bin noch totaler Neuling in C++ und auch im OOP, also wäre eine etwas ausführlichere Beantwortung ganz gut. (wenn es geht)
 
also bei mir funktioniert dein code einwandfrei...

Code:
#include <iostream>
using namespace std;

class klasse
{
private:
int variable;
public:
void setvar()
{
variable = 1;
}
void getvar()
{
cout<<variable<<"\n";
}
};

int main()
{
    klasse test;

    test.setvar();
    test.getvar();
  
    return 0;
}


gibt bei mir 1 aus..
 
Der Grund warum er immer eine verschiedene Zahl ausgibt bevor du setvar() aufrufst ist: Die Variable ist vorher nicht initialisiert und hat deswegen irgendeinen Wert. Normalerweise initialisiert man die Member einer Klasse im Konstruktor.
 
@back:
Also bei mir nicht! oO
Woran kann das liegen? Am Compiler?
Ich bekomm da nur ein 1.12345 e 12345 oder so ähnlich.

Normalerweise initialisiert man die Member einer Klasse im Konstruktor.

Aus welchem Grund kann man eigentlich nicht einfach "private: int i = 20;" schreiben?
 
Dann her mit dem Code, dann kann man dir sicher helfen. Ich kenne genügend Leute die immer behaupten der Compiler wäre schuld.
 
Ich hab nie behauptet, dass der Compiler Schuld wäre. Ich hab nur gesagt, dass er meckert. ^^

Code:
#include <windows.h>
#include <iostream>
using namespace std;

class klasse
{
private:
int variable = 1; //Das kreidet er an.
public:
void setvar()
{
variable = 2;
}
void getvar()
{
cout<<"wert: "<<variable<<"\n";
}
}

int main()
{

klasse test;
test.getvar();

}

Liegt das vielleicht daran, dass ich dafür so etwas meinen eigenen Konstruktor benutzen muss?
 
So funktioniert es

Code:
#include <iostream>
#include <stdlib.h>
using namespace std;

class klasse
{
private:
int variable;
public:
klasse()
{
        variable = 0;
}
void setvar()
{
    variable = 2;
}
 void getvar()
 {
 cout<<"wert: "<<variable<<"\n";
 }
};

int main(int argc,char **argv)
{
 klasse test;
 test.getvar();
 system("pause");
return 0;
}

Eine Klassendefinition gehört mit Strichpunkt abgeschlosssen. Vaiablen kann man nicht einfach so Werte zuweisen, dafür ist der Konstruktor. Du solltest dich einmal genauer mit den Grundlagen beschäftigen. :P
 
Vor allem sagt der Compiler ja auch, was da falsch ist:
Code:
test.cpp:7: error: ISO C++ forbids initialization of member âvariableâ
Code:
test.cpp:19: note: (perhaps a semicolon is missing after the definition of âklasseâ)

Zumindest tut mein g++ das.
 
Zurück
Oben