si, devo sicuramente ripassarmi meglio l' uso delle funzioni. ora sembra che il codice stia migliorando devo solo modificare alcune cose nel main
ok, ora sembra che debba "sprivatizzare" il P.colore all' interno del main, solo che dentro il main non posso usare di nuovo la parola Friend, pensavo invece di usare una sola riga di codice che mi dava la possibilità di collegarmi direttamente alla funzione già "liberata"Al termine delle modifiche o se ti blocchi, pubblica nuovamente dove sei arrivato, così vediamo.
Quindi con la parola Friend io posso trasformare un private in public e rendere effettivo il cambiamento solo per le funzioni collegate alle classi ma nel main non si può collegare nessuna riga di codice ad una funzione già liberata?Nel main() devi solo creare una una classe Punto, poi chiamare CambiaColore passando tale classe e il valore del colore che vuoi cambiare. Tutto qui. Il concetto è proprio che il parametro ‘colore’ rimanga privato e quindi sia accessibile SOLO all’interno della classe dagli “amici” della stessa.
a me pare che qui il problema non sia che certi libri siano fatti male (in rete ne trovi a milioni) ma piuttosto che tu non abbia ancora capito i minimi concetti della programmazione ad oggetti e la differenza tra un metodo privato e uno pubblico, altrimenti non cercheresti di accedere a ‘colore’ all’interno del main(). Non puoi. È privato.
E ho anche seri dubbi sulla tua conoscenza di programmazione, in quanto dichiari una funzione e poi non la chiami MAI (cambiaColore)
non ti buttare giù, le mie non sono critiche, sto solo cercando di trovare le tue limitazioni ed aiutarti a superarle. Da come scrivi mi pare che i problemi qui siano più seri che solo il concetto di ‘friend’
Non capisco cosa tu voglia dire.Quindi con la parola Friend io posso trasformare un private in public e rendere effettivo il cambiamento solo per le funzioni collegate alle classi ma nel main non si può collegare nessuna riga di codice ad una funzione già liberata?
main()
{
Punto a;
CambiaColore(a, 10);
....
}
Scusa, devo avere fatto confusione, in questi giorni sono dietro a tante cose ?Quello non è l'URL che ti ho linkato. Io ti ho linkato questo https://en.cppreference.com/w/cpp/language/friend
E te l'ho linkato qui.
Di fatti non è difficile il concetto, più che altro penso che dovrò argomentare e farmi un po di esperienza in più con le funzioni e gli oggetti delle classi.Non capisco cosa tu voglia dire.
‘Colore’ rimane privato, quindi NON si può accedere dal main()
‘CambiaColore’ invece può accedere a ‘colore’ in quanto viene definita come “amica”
Main() può accedere a CambiaColore (in quanto è una funzione globale come ogni altra).
Quindi:
Non mi pare così difficile.Codice:main() { Punto a; CambiaColore(a, 10); .... }
#include <iostream>
using namespace std;
class Punto
{
public:
int x;
int y;
Punto(void);
void StampaDati(void);
private:
int colore;
friend void CambiaColore(Punto &,int);
};
Punto::Punto(void)
{
x=0;
y=0;
colore=0;
}
void Punto::StampaDati(void)
{
cout<<"Ascisse:"<<x<<endl;
cout<<"Ordinata:"<<y<<endl;
cout<<"Colore:"<<colore<<endl;
}
void CambiaColore(Punto &p, int c)
{
p.colore = c;
}
int main()
{
cout << "Le funzioni amiche :)" << endl;
Punto p;
CambiaColore(p, 3);
p.StampaDati();
return 0;
}
#include <iostream>
using namespace std;
class Punto
{
public:
int x;
int y;
Punto(void);
void StampaDati(void);
private:
int colore;
friend void CambiaColore(Punto &, int);
};
Punto::Punto(void)
{
x=0;
y=0;
colore=0;
}
void Punto::StampaDati(void)
{
cout<<"Ascisse:"<<x<<endl;
cout<<"Ordinata:"<<y<<endl;
cout<<"Colore:"<<colore<<endl;
}
void CambiaColore(Punto &a, int c)
{
Punto P;
P.colore = c;
P.StampaDati();
}
int main()
{
cout << "Le funzioni amiche :)" << endl;
Punto a;
CambiaColore(a, 10);
return 0;
}
void CambiaColore(Punto &a, int c) { Punto P; P.colore = c; P.StampaDati(); } int main() { cout << "Le funzioni amiche :)" << endl; Punto a; CambiaColore(a, 10); return 0; }
Che poi a dire il vero quello è un concetto generale di programmazione, non solo di OOP e nemmeno del linguaggio C. È un concetto base.Sono concetti base della OOP questi. …