Salut, sunt Serban si acesta este al douazecisisaselea tutorial dintr-o suita de tutoriale ale limbajului C++, tutoriale ce le voi face pentru tutorialevideo.info; In acest tutorial vom discuta despre pointeri la functii.

Folosim pointeri la functii nu neaparat ca o necesitate, cat ca si o usoara citire si intelegere a codului.

In tutorialul de astazi vom folosi un pointer la o functie pentru a vedea cum am putea defini explicit si usor de inteles modul in care prelucram un sir de numere intregi. Vom face o sortare peste un astfel de sir si in loc sa ne dam seama din cod modul in care sortam, vom alege varianta mai intuitiva.
#include <iostream>
using namespace std;

void SelectionSort(int *anArray, int nSize, bool (*pComparison)(int, int));
bool Ascending(int nX, int nY);
bool Descending(int nX, int nY);
void PrintArray(int *pArray, int nSize);

int foo(double f) {
return (int) f/2;
}

int* foo(float f) {
int pp = (int) f/2;
return &pp;
}

struct P{
int p;
char c;
};

struct P fooP() {
P p;
p.p = 2;
p.c = ‘c’;
return p;
}
int main() {
int a = 2;
int* p = &a;
int* (*pFoo) (float) = foo;
int (*pFoo2) (double) = foo;
struct P (*pFooP) () = fooP;

cout << foo(2.9) << endl;
cout << *pFoo(2.9) << endl;

int anArray[9] = { 3, 7, 9, 5, 6, 1, 8, 2, 4 };

SelectionSort(anArray, 9, Descending);
PrintArray(anArray, 9);

SelectionSort(anArray, 9, Ascending);
PrintArray(anArray, 9);

return 0;
}

void SelectionSort(int *anArray, int nSize, bool (*pComparison)(int, int)) {
for (int nStartIndex= 0; nStartIndex < nSize; nStartIndex++) {
int nBestIndex = nStartIndex;

for (int nCurrentIndex = nStartIndex + 1; nCurrentIndex < nSize; nCurrentIndex++) {
if (pComparison(anArray[nCurrentIndex], anArray[nBestIndex])) {
nBestIndex = nCurrentIndex;
}
}

swap(anArray[nStartIndex], anArray[nBestIndex]);
}
}

bool Ascending(int nX, int nY) {
return nY > nX;
}

bool Descending(int nX, int nY) {
return nY < nX;
}

void PrintArray(int *pArray, int nSize) {
for (int iii=0; iii < nSize; iii++) {
cout << pArray[iii] << ” „;
}
cout << endl;
}

Urmariti tutorialul pentru o mai buna explicatie.

NU uitati: cititi si documentati-va in plus, nu parcurgeti _doar_ aceste tutoriale pentru ca nu sunt indeajuns pentru a va dezvolta calitatile de coding, ci sunt doar mici rampe de lansare catre cunoastere.

Dupa fiecare tutorial vizionat, abordati subiectul dezbatut in acesta pe net, in cartea `Thinking in C++`,in sectiunea de comentarii.

NU lasati sa treaca pe langa voi o informatie neclara, pentru ca orice farama de cunoastere este importanta.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *