Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Klasy, błąd kompilacji

Ostatnio zmodyfikowano 2010-05-19 13:02
Autor Wiadomość
joasia_sz
Temat założony przez niniejszego użytkownika
Klasy, błąd kompilacji
» 2010-05-18 18:56:29
Witam. W mojej edukacji na temat c++ stanęłam na temacie klasy. Z klasami typu public nie mam większego problemu, lecz nie potrafię już przejść klas typu private. Mimo czytania artykułu na tej stronie, kilku na innych stronach i korzystania z podręcznika nie rozumiem jak działają klasy prywatne, nie rozumiem ich składni i nie potrafię napisać programu.
Oto mój program:
C/C++
#include<iostream>

using namespace std;

class czlowiek
{
private:
    int wiek;
public:
    int wezwiek;
    int wpiszwiek;
};

int czlowiek::wezwiek()
{
    return wiek;
}

int main()
{
    osoba adam;
    adam.wezwiek( 5 );
    count << "wiek" << adam.wezwiek << endl;
    system( "pause" );
    return 0;
}
To jeden z wielu. Nie wiem, na czym polegają moje błędy. Proszę o pomoc i wytłumaczenie w sposób jak do zielonego.

Pozdrawiam
P-16944
kamillo121
» 2010-05-18 20:32:27
W public, wezwiek masz jako zmienna a odwołujesz się do niej jak do funkcji więc zamiast
C/C++
public:
int wezwiek;
int wpiszwiek;

to
public:
int wezwiek();
void wpiszwiek( int ); //ta funkcja nic nie zwraca więc może być void

do funkcji odwołujesz się jak do zmiennej :
C/C++
adam.wezwiek
a skoro wezwiek to funkcja to powinno by ć adam.wezwiek() itd

następnie:
C/C++
int czlowiek::wezwiek() //wez wiek zwraca Ci wiek
{
    return wiek;
}

//zdefiniuj wpiszwiek(int)

int main()
{
    osoba adam; //w twoim fragmencie kodu nie ma definicji klasy osoba wiec chyba chodzi o  czlowiek adam ;
    adam.wezwiek( 5 ); // w tym miejscu powinno byc chyba wpiszwiek(5) ?
   
    [..]

Pola prywatne klasy definiujesz tak jak publiczne  i prawie tak samo z nich korzystasz . Prawie dlatego że dostęp do pól prywatnych mają funkcje z klasy (w twojej klasie wezwiek() i wpiszwiek) ale Ty nie masz . Czyli nie możesz odwołać się do zmiennej prywatnej "wiek" z klasy czlowiek (adma.wiek=2) , musisz skorzystać z funkcji będącymi metodami klasy i za ich pomocą pobrać wartość zmiennej ,zmienić ją .
P-16948
joasia_sz
Temat założony przez niniejszego użytkownika
» 2010-05-19 11:49:31
Już troszeczkę się rozjaśniło , bardzo dziękuje. Stworzyłam już swój pierwszy, działający program w klasach, lecz mam jedno za pytanko:

C/C++
#include<iostream>

using namespace std;

class ksiazka
{
public:
    string imie;
    string plec;
    int wiek;
    string pobierz_adres();
    void ustaw_adres( string jego_adres );
    int pobierz_telefon();
    void ustaw_telefon( int jego_telefon );
private:
    string adres;
    int telefon;
};

string ksiazka::pobierz_adres()
{
    return adres;
}

void ksiazka::ustaw_adres( string jego_adres )
{
    jego_adres = adres;
}

int ksiazka::pobierz_telefon()
{
    return telefon;
}

void ksiazka::ustaw_telefon( int jego_telefon )
{
    jego_telefon = telefon;
}
int main()
{
    ksiazka osoba;
    osoba.imie = "asia";
    osoba.wiek = 25;
    osoba.plec = "k";
    osoba.ustaw_adres( "Burakowa" );
    osoba.ustaw_telefon( 505345601 );
   
    cout << "Pani " << osoba.imie << " ma " << osoba.wiek << " lat i jest plci " << osoba.plec;
    cout << " . Jej adres to: " << osoba.pobierz_adres() << ", a jej telefon to :" << osoba.pobierz_telefon() << endl;
    system( "pause" );
    return 0;
}
konkretnie chodzi o to : osoba.ustaw_adres("Burakowa"); - po skompilowaniu nie jest widoczna nazw tej ulicy. Czyżbym coś źle zadeklarowała w klasach ?Ogólnie kompiluje się i jako tako jest w porządku, tylko interesuje mnie sposób zapisu danych typu string w klasach prywatnych :)

Pozdrawiam i dziękuję :)
P-16973
DejaVu
» 2010-05-19 12:33:34
Jest:
jego_telefon = telefon;
Powinno być:
telefon = jego_telefon;
To samo w adresie.

P-16985
joasia_sz
Temat założony przez niniejszego użytkownika
» 2010-05-19 13:01:47
Bardzo dziękuję, pomogło :)
P-16995
DejaVu
» 2010-05-19 13:02:54
Proszę bardzo :) Problemy chyba rozwiązane, więc zamykam ;)
P-16996
« 1 »
  Strona 1 z 1