• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Etykiety public i protected

VPS Starter Arubacloud
0 głosów
127 wizyt
pytanie zadane 28 września 2020 w C i C++ przez Pelo Użytkownik (520 p.)
#include <iostream>
using namespace std;

class Pracownik
{public:
    string imie;
    string nazwisko;
    private:
    int pensja;
   protected:
    bool aktywny=true;
    void wpisz(string imie,string nazwisko,int pensja);
    void pokaz();
    void porownaj(Pracownik a);
    void podwyzka(int podw);
};
void Pracownik::podwyzka(int podw)
{
    pensja+=podw;
    cout<<"Pensja "<<imie<<" po podwyzce: "<<pensja<<endl;
}
void Pracownik::porownaj(Pracownik a)
{
    if(pensja>a.pensja)
    cout<<"Pensja "<<a.imie<<" jest mniejsza od pensji "<<imie<<endl;
    else if (pensja<a.pensja)
    cout<<"Pensja "<<a.imie<<" jest większa od pensji"<<imie <<endl;
    else
    cout<<"Pensja pracowników "<<a.imie<<" oraz "<<imie <<" jest równa!"<<endl;
}
void Pracownik::pokaz()
{
    cout<<imie<<endl;
    cout<<nazwisko<<endl;
    cout<<pensja<<endl;
    if(aktywny=true)
    cout<<"aktywny"<<endl;
    else
    cout<<"nieaktywny"<<endl;
}
void Pracownik::wpisz(string a,string b,int c)
{
    imie=a;
    nazwisko=b;
    pensja=c;
}


int main()
{
    Pracownik prac1;
    Pracownik prac2;
    Pracownik prac3;
    Pracownik prac4;
prac1.wpisz("Jan","Kowalski", 4000);
prac2.wpisz("Tomasz","Nowak", 3500);
prac3.wpisz("Anna","Wiśniewska", 4000);
prac4.wpisz("Michał","Kwiatkowski",7500);
prac1.pokaz();
prac2.pokaz();
prac3.pokaz();
prac4.pokaz();
prac1.porownaj(prac2);
prac2.porownaj(prac3);
prac1.porownaj(prac3);
prac1.podwyzka(600);
prac1.pokaz();
}

Cześć, dlaczego np. funkcja wpisz nie może korzystać ze zmiennej pod private/protected? Dopiero zaczynam z programowaniem obiektowym i z tego co czytałem, jeśli zadeklaruję funkcję w klasie to ta funkcja powinna mieć dostęp do wszystkich zmiennych klasy (nawet private/protected). Niestety tutaj to tak nie działa.

2 odpowiedzi

+1 głos
odpowiedź 28 września 2020 przez j23 Mędrzec (195,220 p.)
wybrane 28 września 2020 przez Pelo
 
Najlepsza

Rzecz w tym, że do metody wypisz (i całej reszty) nie ma dostępu funkcja main.

komentarz 28 września 2020 przez Pelo Użytkownik (520 p.)
Zmieniłem funkcje na publiczne i działa. Czy takie rozwiązanie jest ok ?
1
komentarz 28 września 2020 przez j23 Mędrzec (195,220 p.)
Jeśli metody mają być widoczne "z zewnątrz", to tak.
+1 głos
odpowiedź 28 września 2020 przez tangarr Mędrzec (154,900 p.)

Nie możesz użyć metod swojej klasy ponieważ pomyliłeś specyfikatory dostępu.

class Pracownik
{
public: // pola/metody publiczne (dostępne z zewnątrz)
    string imie;
    string nazwisko;
    private:
    int pensja;
protected: // pola/metody chronione (niedostępne z zewnątrz)
    bool aktywny=true;
    void wpisz(string imie,string nazwisko,int pensja);
    void pokaz();
    void porownaj(Pracownik a);
    void podwyzka(int podw);
};

Zamień miejscami słowa kluczowe public i protected.

Podobne pytania

0 głosów
2 odpowiedzi 390 wizyt
pytanie zadane 30 marca 2018 w Java przez neos Początkujący (320 p.)
0 głosów
1 odpowiedź 176 wizyt
0 głosów
1 odpowiedź 205 wizyt
pytanie zadane 19 czerwca 2021 w PHP przez Renzov Obywatel (1,220 p.)

92,775 zapytań

141,703 odpowiedzi

320,556 komentarzy

62,109 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...