16.05.2015 Views

Programowanie w C++ Borland Builder - Wyższa Szkoła Informatyki ...

Programowanie w C++ Borland Builder - Wyższa Szkoła Informatyki ...

Programowanie w C++ Borland Builder - Wyższa Szkoła Informatyki ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Programy manipulujące obiektami w taki sposób mogą wymagać<br />

modelu pamięci większego niż przyjmowany domyślnie model SMALL.<br />

Typowy komunikat pojawiający się przy zbyt małym modelu pamięci<br />

to:<br />

Error 43: Type mismatch in parameter to call to<br />

Pokazuj1(Licznik)...<br />

(Źły typ argumentu przy wywołaniu funkcji Pokazuj(...)...)<br />

Programy obiektowe są z reguły szybke, ale niestety dość<br />

"pamięciochłonne". W IDE BORLAND <strong>C++</strong> masz do dyspozycji opcję:<br />

Options | Compiler | Code generation | Model<br />

Dokładniejsze informacje o modelach pamięci znajdziesz w dalszej<br />

części książki.<br />

________________________________________________________________<br />

O PROBLEMIE REFERENCJI.<br />

Typowy (domyślny) sposób przekazywania argumentów do funkcji w<br />

<strong>C++</strong> polega na tzw. "przekazaniu przez wartość" i jest inny niż<br />

Pascalu, czy Basicu. Ponieważ w polskich warunkach do C/<strong>C++</strong><br />

większość adeptów "dojrzewa" po przebrnięciu przez Basic i/lub<br />

Pascal, programiści ci obciążeni są już pewnymi nawykami i<br />

pewnym schematyzmem myślenia, który do <strong>C++</strong> niestety nie da się<br />

zastosować i jest powodem wielu pomyłek. To, co w Basicu wygląda<br />

zrozumiale (uwaga, tu właśnie pojawia się automatyzm myślenia):<br />

PRINT X<br />

INPUT X<br />

REM Wyprowadź bieżącą wartość zmiennej X<br />

REM Pobierz wartość zmiennej X<br />

a w Pascalu:<br />

writeln(X); { Wyprowadź bieżacą wartość zmiennej X }<br />

readln(X); { Pobierz wartość zmiennej X }<br />

przyjmuje w C/<strong>C++</strong> formę zapisu wyraźnie dualnego:<br />

printf("%d", X); //Wyprowadź wartość zmiennej X<br />

scanf("%d", &X); //Pobierz wartość zmiennej X<br />

Na czym polega różnica? Jeśli odrzucimy na chwilę automatyzm i<br />

zastanowimy się nad tą sytuacją, zauważymy, że w pierwszym<br />

przypadku (wyprowadzanie istniejących już danych - PRINT,<br />

wrilteln, printf()) w celu poprawnego działania funkcji<br />

powinniśmy przekazać jej BIEŻĄCĄ WARTOŚĆ ARGUMENTU X (adres<br />

zmiennej w pamięci nie jest funkcji potrzebny). Dla Basica,<br />

Pascala i <strong>C++</strong> bieżąca wartość zmiennej kojarzoana jest z jej<br />

identyfikatorem - tu: "X". W drugim jednakże przypadku (pobranie<br />

danych i umieszczenie ich pod właściwym adresem pamięci) jest<br />

- 313-

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!