Wskaźnik do funckji - proszę o wyjaśnienie kodu

0

Witam, nie mogę zrozumieć kodu, a mianowicie wskaźniki do funkcji. Drugi argument funkcji estimate wskazuje na inną funkcję, której argumentem jest zmienna typu int. Nie rozumiem skąd bierze się wartość tej zmiennej. Proszę o wyjaśnienie.

 #include<iostream>
double betsy(int);
double pam(int);

void estimate(int lines, double (*pf)(int));

int main()
{
	using namespace std;
	int code;
	cout << "How many lines of code do you need> ";
	cin>> code;
	cout << "Here's Betsy's estimate:\n";
	estimate(code, betsy);
	cout << "Here's Pam's estimate:\n";
	estimate(code, pam);
	return 0;
}

double betsy(int lns)
{
	return 0.05 * lns;
}

double pam(int lns)
{
	return 0.03 * lns + 0.0004 * lns * lns;
}

void estimate(int lines, double (*pf)(int))
{
	using namespace std;
	cout << lines << " lines will take ";
	cout << (*pf)(lines) << " hour(s)\n";
}
2

tu: estimate(code, pam); jako drugi argument przekazujesz wskaźnik na funkcje pam.
Radzę zapisywać takie rzeczy w ten sposób: estimate(code,&pam); wtedy te rzeczy stają się ewidentne.

Samą deklaracje też warto zapisać nieco inaczej, zamiast: void estimate(int lines, double (*pf)(int));

typedef double FUNC(int);
void estimate(int lines,FUNC *pf);
0

Dzięki za cenne rady, będę stosował. Jednak nadal nie wiem w którym miejscu zmienna lns przyjmuje wartość. Argument odczytuję tak: zmienna pf wskazująca na funkcję przyjmującą jako argument wartość całkowitą, zwracającą wartość double. Ale kiedy właśnie ona przyjmuje tą wartość całkowitą? Ja tego nie widzę.

1

tu: cout << (*pf)(lines) << " hour(s)\n";
można by to zapisać jako: cout<<pf(lines)<<" hour(s)\n";

0

Wielkie dzięki, w końcu zrozumiałem i jeszcze stylistycznie poprawiłem kod.

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