Witam, chciałbym się dowiedzieć jak można się dostać się do prywatnych danych zadeklarowanych w klasie?
metodami tejże klasy, albo poprzez zaprzyjaźnienie :)
A można by prosić przykład jakiś?
funkcje skladowe
POdstawy klas, proponuję jakąś książk/kurs, rozdział o klasach i tam znajdziesz rozwiazanie.
#include <iostream>
using namespace std;
class Person
{
private:
int wiek;
string imie,nazwisko;
public:
void wypiszDane(int wiek, string imie, string nazwisko)
{
wiek = wiek;
imie = imie;
nazwisko = nazwisko;
cout << "Osoba nazywa sie: " << imie << " " << nazwisko << " oraz ma " << wiek << " lat.";
}
};
int main()
{
Person p;
p.wypiszDane(36,"Mystogan","Mystoganowski");
}
To wersja poprawiona :P. Powaliło mi się z C# wcześniej. Modyfikuję dane prywatne przy pomocy funkcji składowej.
Jeżeli chcesz prywatne dane modyfikować poza klasą to musisz skorzystać z zaprzyjaźnionych funkcji (IMO to bez sensu skoro je robisz prywatne to tak jak rzutować const_cast, żeby usunać stałą.. to po co robisz ją stałą?) lub zrobić te dane publiczne - wtedy nie ma problemu. Możesz też zrobić je chronione i modyfikować w klasie pochodnej przy pomocy tzw. dziedziczenia.
Uwaga a teraz zadanie dla Ciebie: napisz funkcję składową, która zamieni imie z nazwiskiem i na odwrót.
public:
void poprawa()
{
imie.swap(nazwisko), o to chodziło?
}
Mystogan napisał(a):
Jeżeli chcesz prywatne dane modyfikować poza klasą to musisz skorzystać z zaprzyjaźnionych funkcji (IMO to bez sensu skoro je robisz prywatne to tak jak rzutować const_cast, żeby usunać stałą.. to po co robisz ją stałą?) lub zrobić te dane publiczne - wtedy nie ma problemu. Możesz też zrobić je chronione i modyfikować w klasie pochodnej przy pomocy tzw. dziedziczenia.
A z Katowic do Częstochowy jedzie się przez Białystok.
Jeżeli zrobi dane publiczne to nie ma hermetyzacji. Stosowanie dziedziczenia tylko po to, żeby dostać się do pól w klasie nadrzędnej? Przecież to totalnie bez sensu.
@michcio19923 - gettery
i settery
oraz podstawy obiektowości.