Hermetyzacja, enkapsulacja, kapsułkowanie, opakowywanie...

0

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

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?

1 użytkowników online, w tym zalogowanych: 0, gości: 1