Z obecną klasą Klasa nie za bardzo możesz współpracować, bo zmienne są prywatne. Możesz wykorzystać fakt, że Twoja klasa ze względu na swoją prostote należy do typu plain old data POD, czyli jej obiekty w pamięci składają się z samych składowych ułożonych w kolejności zdeklarowania w klasie. To oznacza, że można w bardzo BRZYDKI sposób dobrać się do jej składowych mimo, że sa prywatne. Dodatkowo wiemy, że wszystkie składowe są typu int, więc można ją potraktować jak tablicę, która właśnie tym jest: zmiennymi tego samego typu ułożonymi jedna po drugiej w pamięci (oczywiście po odpowiednim zrzutowaniu):
void qwerty()
{
Klasa k1(1, 2, 3);
int* hacky_int_getter = reinterpret_cast<int*>(&k1);
for (size_t i = 0; i < 3; i++)
{
cout << hacky_int_getter[i] << endl;
}
}
Gdyby wszystkie składowe nie były tego samego typu to musiałbyś w trakcie zmieniać typ wskaźnika (rzutować), żeby operator ++ wiedział o ile bajtów przesunąć się w pamięci a cout zeby wiedzial jak wypisac te bajty.
A tak serio to dodaj metody zwracające wartości składowych tzw gettery:
class Klasa
{
private:
int raz;
int dwa;
int trzy;
public:
Klasa(int r, int d, int t)
{
raz = r;
dwa = d;
trzy = t;
}
int getRaz() {
return raz;
}
int getDwa() {
return dwa;
}
int getTrzy() {
return trzy;
}
};
wtedy zeby dostać wartość składowej klasy po prostu wywołujesz na jej obiekcie getRaz() czy tam getDwa(). getSkladowa to oczywiście konwencja programistyczna. Te metody mogą mieć dowolną nazwe, ale wtedy kod traci czytelność.
Mógłbyś zmienić private na public i dobierać się do tych składowych normalnie, ale wtedy każdy może te zmienne zmodyfikować - jest to zła praktyka.
PS Dla ciekawskich - gettery i settery w idealnym świecie w programowaniu obiektowym nie powinny występować, ale Ty się na razie tym nie przejmuj, a świat nie jest idealny :P