Jak wiadomo w klasie mamy 3 sekcje hermetyzacyjne public, private i protected. Moim zadaniem jest pokazanie wszystkich dozwolonych i
zabronionych metod dostępu do zdefiniowanych pól w tych sekcjach. Czy jest ktoś w stanie wymienić te metody ewentualnie jakieś proste przykłady? Z góry dziękuje!
0
0
Huh? Zrób klasę z tymi sekcjami, do każdej daj jakiś int
. Zrób jakąś funkcję składową i pokaż, że możesz się wszędzie odwołać. Potem zrób klasę pochodną i pokaż, że możesz odwołać się do protected
i public
a do private
już nie. W main()
możesz pokazać, że możesz odwołać się tylko do public
. O takie coś Ci chodzi?
Potem możesz jeszcze dodać deklaracje przyjaźni i dalej pokazywać...
0
Napisałem tak jak mówiłeś...
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
class Hermetyzacja
{
friend class Enkapsulacja; // deklaracja przyjaźni
private:
int wiek;
public:
double wspolczynnikBMI();
int waga;
protected:
int wzrost;
};
double Hermetyzacja::wspolczynnikBMI()// funkcja skladowa
{
return waga/wzrost*wiek;
}
class Enkapsulacja : public Hermetyzacja //klasa pochodna
{
public:
int waga2;
void wpisz( Hermetyzacja& osoba , int nowaWartosc )
{
osoba.wiek = nowaWartosc; // niemożliwe bez deklaracji przyjaźni
}
protected:
int wzrost2;
private:
int wiek2;
};
void main()
{
int wiek = 18, wzrost = 182, waga = 88;
int wiek2 = 14, wzrost2 = 165, waga2 = 65;
Hermetyzacja osoba;
Enkapsulacja osoba2;
cout << osoba.wspolczynnikBMI() <<endl;
cout << osoba2.wspolczynnikBMI() <<endl;
osoba2.wpisz(osoba, 24);
cout << osoba.wspolczynnikBMI() <<endl;
getch();
}
Dlaczego w wyniku wychodzą mi jakieś dziwne liczby? Tak jakby adresy pamięci poszczególnych zmiennych...
0
wklejam to samo co wyżej po autoformatterze, bo nie da się czytać:
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
class Hermetyzacja
{
friend class Enkapsulacja; // deklaracja przyjaźni
private:
int wiek;
public:
double wspolczynnikBMI();
int waga;
protected:
int wzrost;
};
double Hermetyzacja::wspolczynnikBMI()// funkcja skladowa
{
return waga/wzrost*wiek;
}
class Enkapsulacja : public Hermetyzacja //klasa pochodna
{
public:
int waga2;
void wpisz( Hermetyzacja& osoba , int nowaWartosc )
{
osoba.wiek = nowaWartosc; // niemożliwe bez deklaracji przyjaźni
}
protected:
int wzrost2;
private:
int wiek2;
};
void main()
{
int wiek = 18, wzrost = 182, waga = 88;
int wiek2 = 14, wzrost2 = 165, waga2 = 65;
Hermetyzacja osoba;
Enkapsulacja osoba2;
cout << osoba.wspolczynnikBMI() <<endl;
cout << osoba2.wspolczynnikBMI() <<endl;
osoba2.wpisz(osoba, 24);
cout << osoba.wspolczynnikBMI() <<endl;
getch();
}
0
w którym miejscu przypisujesz polom klasy wartości?