Metoda przyjmujaca wskaźnik lub referencję funkcji

0

Witam,
Jaka jest różnica między:

void List::priceadjust(void(&pf)(Item&))

a

void List::priceadjust(void(*pf)(Item&))

Program działa bez względu na to jak zapiszę ale nie rozumiem różnicy. Raz metoda przyjmuje referencję funkcji a raz wskaźnik.

dodanie znaczników <code class="cpp"> - fp

1

Wynika to z tego że C++ ma domyślną konwersję pomiędzy:
void (&pf)(Item&)
a
void (*pf)(Item&)

#include <iostream>
using namespace std;

typedef int Item;

void fun(Item &x)
  {
   cout<<x<<' ';
  }
  
void metodaA(void(&pf)(Item&)) // nie ważne funkcja czy metoda
  {
   Item z=Item();
   cout<<"A: ";
   pf(z);
   cout<<endl;
  }
  
void metodaB(void(*pf)(Item&)) // nie ważne funkcja czy metoda
  {
   Item z=Item();
   cout<<"B: ";
   pf(z); // domyślna konwersja z * do &
   (*pf)(z); // podano bezpośrednio &
   (*(*pf))(z); // & skonwertuje się do * aby móc zastosować wyłuskanie
   (*(*(*pf)))(z); // jw dwa razy
   cout<<endl;
  }
 
int main()
  {
   metodaA(fun);

   metodaB(fun);  // & domyślnie skonwertuje się do *
   metodaB(&fun); // bezpośrednio podany *
   
   return 0;
  }
0

Ok dzięki właśnie analizuje twój programik. Nieśmiało spytam co oznacza zapis Item z=Item() ?;

0

To samo co Item z(); , a ponieważ Item jest intem, to samo co int z = 0;

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