[C++] Esercizio numero pari

floppyes
Ciao a tutti!

Devo svolgere il seguente esercizio ma non mi è chiara una cosa.

Testo:
Definire una classe che gestisca un attributo (privato) intero utilizzando:
1) Un metodo privato che produce 1 se l'attributo è pari e 0 altrimenti
2) Un metodo pubblico che, sfruttando il precedente metodo, visualizza l'attributo se pari.


Non ho capito come fare per risolvere il punto 2. Come è possibile creare un metodo pubblico che sfrutta uno privato per visualizzare l'attributo?

Io ho scritto il codice utilizzando la classe privata:
#include <iostream>
using namespace std;

class Numero
{
public:
   Numero();
   int num;
   int pari(int intero);
};

int Numero::pari(int intero)
{
   if (intero%2==0)
      return 1;
   else
      return 0;
}

Numero::Numero()
{
   num=0;
}

int main ()
{
   Numero prova;
   int num;
   int n;
   cout << "Inserisci un numero: ";
   cin >> num;
   n=prova.pari (num);
   cout <<  n << endl;
   return 0;
}


Però non capisco come implementare la classe pubblica!

Grazie mile
Ciaoo :)

Risposte
apatriarca
Immagino che tu debba usare la funzione privata per verificare se l'attributo è pari. In ogni caso, in questo momento tutta la classe è pubblica. Andrebbe riscritta in modo da esserci una parte privata e dovrebbe anche esserci un modo per settare l'attributo num (che deve essere privato in base al test dell'esercizio).

floppyes
Ciao!

Grazie per la risposta, ho riscritto il codice in questo modo e ci sono riuscito!
#include <iostream>

using namespace std;

class Numero
{
private:
   int num;
private:
	int prendi_num ()
	{
		return num;
	}
private:
	int funz_priv ()
	{
		if (prendi_num()%2==0)
			return 1;
		else
			return 0;
	}

public:
	void assegna_num (int x)
	{
		num = x;
	}
public:
	int funz_publ ()
	{
		if (funz_priv())
			return 1;
		else
			return 0;
	}
};

int main ()
{
   Numero intero;
   int valore;
   int ris;
   cout << "Inserisci un numero: ";
   cin >> valore;
   intero.assegna_num(valore);
   ris=intero.funz_publ ();

   cout << ris << endl;

   return 0;
   
}


Grazie
Ciaoo!

apatriarca
La funzione pubblica non deve restituire 0 o 1, ma visualizzare l'attributo se questo è pari. Qualcosa tipo:
if (funz_priv()) { cout << prendi_num() << endl; }

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.