Ïîìîãíè íè äà íàïðàâèì Uroci.net ïî - áîãàò! Äîáàâè óðîê
Êàòåãîðèè Äðóãè óðîöè Adobe Photoshop Adobe Illustrator Adobe Flash Adobe Fireworks DreamWeaver CSS è HTML Corel Draw Image Ready PHP SEO CMS Microsoft Windows Microsoft Word Microsoft Excel PowerPoint Microsoft Access Microsoft Publisher Linux Visual basic JavaScript Ajax 3ds Max Maya 3D C++
C++
Sound Forge Gimp SWiSH

C++ ÷àñò.5 (Ñâîáîäíà ïàìåò)

C++ » C++
fix3d   òðóäíîñò:    âèäÿí: 4890



5.3. Ïðåçàðåäèìè èìåíà íà ôóíêöèè

Çà äàäåíà äóìà ñå êàçâà, ÷å å ïðåçàðåäèìà, àêî èìà äâå èëè ïîâå÷å ðàçëè÷íè çíà÷åíèÿ. Ñìèñúëúò, â êîéòî å óïîòðåáåíà äóìàòà, ñå îïðåäåëÿ â çàâèñèìîñò îò êîíòåêñòà. Àêî íàïèøåì

static int depth;

çíà÷åíèåòî íà static ñå îïðåäåëÿ îò îáõâàòà íà ïîÿâàòà é. Òîâà å èëè ëîêàëíà ñòàòè÷íà ïðîìåíëèâà èëè å äåêëàðèðàíà ñ ôàéëîâ îáõâàò. ( ñëåäâàùèÿ ðàçäåë, íèå ùå âúâåäåì åäíî òðåòî çíà÷åíèå íà static, êîåòî ñå îòíàñÿ çà ñòàòè÷åí ÷ëåí íà êëàñ). Âúâ âñåêè ñëó÷àé çíà÷åíèåòî íà static íàïúëíî ñå èçÿñíÿâà îò êîíòåêñòà, â êîéòî ñå èçïîëçâàò. Êîãàòî òàêúâ êîíòåêñò ëèïñâà, êàçâàìå, ÷å äóìàòà å äâóñìèñëåíà. Òàêèâà äóìè ìîãàò äà èìàò äâå èëè ïîâå÷å çíà÷åíèÿ, âñÿêî îò êîèòî äà áúäå åäíàêâî âúçìîæíî.

 åñòåñòâåíèòå åçèöè äâóñìèñëèåòî ÷åñòî å óìèøëåíî.  ëèòåðàòóðàòà, íàïðèìåð, äâóñìèñëèåòî ìîæå äà îáîãàòè íàøåòî ðàçáèðàíåòî íà ãåðîèòå è òåìàòèêàòà íà êíèãèòå. Åäíî ëèöå, ìîæå äà áúäå îïèñàíî êàòî îãðàíè÷åíî (çàäúëæåíî, îáâúðçàíî) è ðåøèòåëíî (íåïîêîëåáèìî, òâúðäî). Åäèí îò ãåðîèòå ìîæå äà ñå îáúðíå êúì äðóã è äà êàæå “Õîðàòà íèêîãà íå ñà ñïðàâåäëèâè (âåðíè, òî÷íè)”. ×èòàòåëÿò ìîæå äà âúçïðèåìå ðàçëè÷íèòå çíà÷åíèÿ íà äóìàòà åäíîâðåìåííî.

Äâóñìèñëèåòî, îáà÷å, å íåïîäõîäÿùî çà êîìïèëàòîðà. Àêî êîíòåêñòúò, â êîéòî ñå ïîÿâÿâà äàäåí èäåíòèôèêàòîð èëè îïåðàòîð íå å äîñòàòú÷åí çà äà ñå èçÿñíè çíà÷åíèåòî ìó êîìïèëàòîðúò èçäàâà ñúîáùåíèå çà ãðåøêà. Äâóñìèñëèåòî, îáà÷å, å îñîáåíî âàæíî ïðè ïðåçàðåäèìèòå èìåíà íà ôóíêöèè, òåìàòà íà òîçè ðàçäåë, êàêòî è íà íàñëåäñòâåíîñòòà ïðè êëàñîâåòå, êîåòî å ïðåäìåò íà îáñúæäàíå íà ãëàâè 7 è 8.Çàùî äà ïðåçàðåæäàìå èìåíàòà íà ôóíêöèèòå?

 Ñ++ íà äâå èëè ïîâå÷å ôóíêöèè ìîãàò äà áúäàò äàäåíè åäíè è ñúùè èìåíà, íî ñ óíèêàëíà ñèãíàòóðà, êàòî ñå ðàçëè÷àâàò ïî áðîÿ èëè òèïà íà àðãóìåíòèòå ñè. Íàïðèìåð,

int max( int, int);
double max(double, double );
Complex &( const Complex, const Complex );

Íåîáõîäèìà å îòäåëíà ðåàëèçàöèÿ çà âñåêè óíèêàëåí íàáîð îò àðãóìåíòè íà max(). Âñÿêà îò òÿõ, îáà÷å, èçïúëíÿâà åäíî è ñúùî îáùî äåéñòâèå - âðúùà ïî-ãîëåìèÿ îò äâàòà àðãóìåíòà.

Îò ïîòðåáèòåëñêà ãëåäíà òî÷êà ñúùåñòâóâà ñàìî åäíà îïåðàöèÿ, êîÿòî îïðåäåëÿ ìàêñèìàëíà ñòîéíîñò. Äåòàéëèòå ïî ðåàëèçàöèÿòà îòíîñíî íà÷èíà, ïî êîéòî òîâà ñå èçâúðøâà, ñå îòíàñÿò äî åäèí ïî-øèðîê êðúã èíòåðåñè. ×ðåç ïðåçàðåæäàíåòî íà ôóíêöèèòå ïîòðåáèòåëÿò ìîæå ïðîñòî äà íàïèøå ñëåäíîòî:

int i = max( j, k );
Complex c = max( a, b );

Íà àíãëèéñêè óïîòðåáåíèòå äóìè ñà bound and determined. Èçðå÷åíèåòî èìà âèäà

"People are never just".

Åäèí àíàëîã íè ïðåäëàãà àðèòìåòè÷íèÿò îïåðàòîð. Èçðàçúò 1 + 3 èçâèêâà îïåðàöèÿòà ñúáèðàíå çà öåëè îïåðàíäè, äîêàòî èçðàçà 1.0 + 3.0 èçâèêâà ðàçëè÷íà îïåðàöèÿ çà ñúáèðàíå, êîÿòî îáðàáîòâà îïåðàíäè ñ ïëàâàùà çàïåòàÿ.

Çà ïîòðåáèòåëÿ ðåàëèçàöèÿòà íà òîçè ìåõàíèçúì å ïðîçðà÷íà ïîíåæå îïåðàöèÿòà ñúáèðàíå å ïðåçàðåäåíà òàêà, ÷å äà ïîäàâà ðàçëè÷íè ñâîè ïðåäñòàâèòåëè. Êîìïèëàòîðúò, à íå ïðîãðàìèñòúò, ñå ãðèæè çà ðàçãðàíè÷àâàíåòî íà òåçè ðàçëè÷íè ïðåäñòàâèòåëè. Ïðåçàðåæäàíåòî íà èìåíà íà ôóíêöèè ïðåäëàãà ïîäîáíà ïðîçðà÷íîñò çà ïîòðåáèòåëñêè äåôèíèðàíè ôóíêöèè.

Áåç ñïîñîáíîñòòà çà ïðåçàðåæäàíå íà èìå íà ôóíêöèÿ íà âñåêè íåéí ïðåäñòàâèòåë òðÿáâà äà áúäå äàäåíî ñîáñòâåíî óíèêàëíî èìå. Íàïðèìåð, íàøåòî ìíîæåñòâî îò max() ôóíêöèè ùå ïðèäîáèå âèäà

int max( int, int );
double fmax( double, double );
Complex &Cmax( const Complex&, const Complex& );

Òàçè ëåêñèêàëíà ñëîæíîñò íå å ïðèñúùà íà ïðîáëåìà çà îïðåäåëÿíå íà ïî-ãîëåìèÿ îò äâà îáåêòà îò ðàçëè÷íè òèïîâå äàííè, à ïî-ñêîðî îòðàçÿâà åäíî îãðàíè÷åíèå íà ïðîãðàìíàòà ñðåäà - âñåêè îïåðàòîð, êîéòî ñå ÿâÿâà â îïðåäåëåí îáõâàò, òðÿáâà äà áúäå óíèêàëåí. Òàçè ñëîæíîñò èçïðàâÿ ïðîãðàìèñòà ïðåä åäèí ïðàêòè÷åñêè ïðîáëåì - òîé òðÿáâà èëè äà ïîìíè èëè äà òúðñè âñÿêî èìå.

Ïðåçàðåæäàíåòî íà èìåíàòà îñâîáîæäàâà ïðîãðàìèñòà îò òàçè ëåêñèêàëíà ñëîæíîñò.

Êàê äà ïðåçàðåäèì èìå íà ôóíêöèÿ

Êîãàòî åäíî èìå íà ôóíêöèÿ ñå äåêëàðèðà ïîâå÷å îò åäèí ïúò â åäíà ïðîãðàìà êîìïèëàòîðúò ùå èíòåðïðåòèðà âòîðàòà äåêëàðàöèÿ ïî ñëåäíèÿ íà÷èí:

- àêî êàêòî òèïúò çà âðúùàíå, òàêà è ñèãíàòóðàòà íà äâåòå ôóíêöèè ñúâïàäàò íàïúëíî, òî âòîðàòà ñå ðàçãëåæäà êàòî ïîâòîðíà äåêëàðàöèÿ íà ïúðâàòà. Íàïðèìåð,

// declares the same function
extern void print( int *ia, int sz );
void print( int *array, int size );

Èìåíàòà íà àðãóìåíòèòå íå ñà ñúùåñòâåíè çà ñðàâíåíèåòî íà ñèãíàòóðèòå.

- àêî ñèãíàòóðèòå íà äâå ôóíêöèè ñúâïàäàò òî÷íî, íî òèïîâåòå çà âðúùàíå ñà ðàçëè÷íè, âòîðàòà äåêëàðàöèÿ ñå ðàçãëåæäà êàòî íåïðàâèëíà ïîâòîðíà äåêëàðàöèÿ íà ïúðâàòà è ñå îòáåëÿçâà êàòî ãðåøêà ïî âðåìå íà êîìïèëàöèÿ. Íàïðèìåð,

unsigned int max( int*, int sz );
extern int max( int *ia, int ); // error

- àêî ñèãíàòóðèòå íà äâå ôóíêöèè ñå ðàçëè÷àâàò ïî áðîÿ èëè òèïà íà àðãóìåíòèòå ñè, ñå ñ÷èòà, ÷å äâàòà ïðåäñòàâèòåëÿ íà ôóíêöèÿòà ñà ïðåçàðåäèìè. Íàïðèìåð,

extern void print( int *, int );
void print(double *da, int sz );

Åäíà äåêëàðàöèÿ typedef ïðåäëàãà àëòåðíàòèâíî èìå çà ñúùåñòâóâàù òèï äàííè; òî íå ñúçäàâà íîâ òèï äàííè. Ñëåäíèòå äâà ïðåäñòàâèòåëíà search() ñå òðåòèðàò êàòî ïðèòåæàâàùè åäíà è ñúùà ñèãíàòóðà. Äåêëàðàöèÿòà íà âòîðèÿ ïðåäñòàâèòåë ùå ïðåäèçâèêà ãðåøêà ïî âðåìå íà êîìïèëàöèÿ ïîíåæå âúïðåêè, ÷å ïðèòåæàâà ñúùàòà ñèãíàòóðà, òÿ èìà ðàçëè÷åí òèï çà âðúùàíå.

// typedef does not introduce a new type
typedef char *string;
extern int search( string );
extern char search( char ); // error


Êîãà äà íå èçïîëçâàìå ïðåçàðåæäàíåòî íà ôóíêöèè ?

Ìåõàíèçìúò íà ïðåçàðåæäàíåòî ïîçâîëÿâà ìíîæåñòâî îò ôóíêöèè, êîèòî èçïúëíÿâàò ñõîäíà îïåðàöèÿ, òàêàâà êàòî print(), äà áúäàò èçâèêâàíè ÷ðåç åäíî îáùî ìíåìîíè÷íî èìå. Ñâúðçâàíåòî ñ ïîäõîäÿùèÿ ïðåäñòàâèòåë íà ôóíêöèÿòà å ïðîçðà÷íî çà ïîòðåáèòåëÿ, êàòî ïðè òîâà îòñòðàíÿâà ëåêñèêàëíàòà ñëîæíîñò, ïîðîäåíà îò íåîáõîäèìîñòòà íà âñÿêà ôóíêöèÿ äà ñå äàâà óíèêàëíî èìå, êàòî iPrint() è iaPrint().

Ñëåä êàòî ðàçãëåäàõìå ïðåäèìñòâàòà íà òîçè ìåõàíèçúì íåêà êàæåì êîãà íå ñå ïðåïîðú÷âà òîé äà áúäå èçïîëçâàí. Åäèí ñëó÷àé èìàìå, êîãàòî ìíîæåñòâîòî îò ôóíêöèè íå èçïúëíÿâà ñõîäíà îïåðàöèÿ. Íàïðèìåð, åòî åäèí íàáîð îò ôóíêöèè, êîèòî ðàáîòÿò ñ îáùà àáñòðàêòíà ñúâêóïíîñò îò äàííè. Ïúðâîíà÷àëíî òå ìîãàò äà íè ñå ñòîðÿò êàòî åâåíòóàëíè êàíäèäàòè çà ïðåçàðåæäàíå

void setDate( Date&, int, int, int );
Date& convertDate( char* );
void printDate( const Date& );

Òåçè ôóíêöèè ðàáîòÿò ñ åäíè è ñúùè òèïîâå äàííè, íî íå èçïúëíÿâàò åäíà è ñúùà îïåðàöèÿ.  òîçè ñëó÷àé ëåêñèêàëíàòà ñëîæíîñò å ïðîãðàìèñòêî ñïîðàçóìåíèå, êîåòî ñâúðçâà íàáîðà îò ôóíêöèè ñ îáùèÿ äàííîâ òèï. Êëàñîâèÿò ìåõàíèçúì â Ñ++ ïðàâè òîçè òèï ñúãëàøåíèÿ íåíóæíè. Òåçè ôóíêöèè òðÿáâà äà áúäàò íàïðàâåíè ÷ëåí ôóíêöèè íà êëàñà Date. Íàïðèìåð,

class Date{
set( int, int, int );
Date &convert( char* );
void print();
// ...};

Ñëåäíèÿò íàáîð îò ïåò ÷ëåí ôóíêöèè íà êëàñà Screen èçïúëíÿâàò ðàçëè÷íè îïåðàöèè çà äâèæåíèå. Îòíîâî òå ìîãàò äà áúäàò ïðåçàðåæäàíè ÷ðåç åäíî îáùî èìå move().

Screen& moveHome();
Screen& moveAbs( int, int );
Screen& moveRel( int, int, char *direction );
Screen& moveX( int );
Screen& moveY( int );

Ïîñëåäíèòå äâà ïðåäñòàâèòåëÿ íå ìîãàò äà áúäàò ïðåçàðåæäàíè; òåõíèòå ñèãíàòóðè ñà åäíè è ñúùè. Çà äà îñèãóðèì óíèêàëíîñò íà ñèãíàòóðàòà òðÿáâà äà îáåäèíèì äâåòå ôóíêöèè â åäíà

Screen& ( int, char xy );

Òàêà ïîëó÷àâàìå óíèêàëíà ñèãíàòóðà. Îñâåí òîâà, àêî íÿêàêâî ïðîó÷âàíå ïîêàæå, ÷å ïî îñòà x èëè y ïðîìåíèòå ñà ïî-÷åñòè, ìîæåì äà çàäàäåì ñòîéíîñò ïî ïîäðàçáèðàíå

Screen& move( int, char xy = ‘x’);

Ïðîó÷âàíåòî ìîæå äà ïîêàæå ñúùî, ÷å íàé-÷åñòîòî äâèæåíèå å ïðåìåñòâàíå íàïðåä ñ åäíà ïîçèöèÿ ïî îñòà õ. Àêî ñå ïîääúðæà ñòîéíîñò ïî ïîäðàçáèðàíå çà ïúðâèÿò àðãóìåíò, îáà÷å ñèãíàòóðàòà âå÷å íå å óíèêàëíà

Screen& move( int sz = 1, char xy = ‘x’ );

Ñåãà è äâåòå ôóíêöèè move() è moveHome() ìîãàò äà áúäàò âèêàíè áåç àðãóìåíòè. Íå å íåîáõîäèìî àðãóìåíò ñ èíèöèàëèçàòîð ïî ïîäðàçáèðàíå äà áúäå ðàçãëåæäàí, êîãàòî ñå îïèòâàìå äà ñúïîñòàâèì îïðåäåëåí ïðåäñòàâèòåë ïðè èçâèêâàíå íà ïðåçàðåäèìà ôóíêöèÿ.

 òîçè ìîìåíò ïðîãðàìèñòúò ìîæå äà îñïîðè ñìèñëåíîñòòà íà ïðåçàðåäèìîñòòà íà òåçè äâå ôóíêöèè.  òîçè ñëó÷àé èçãëåæäà, ÷å ïðåçàðåæäàíåòî å ïðîöåñ íà îòõâúðëÿíå íà íåíóæíà èíôîðìàöèÿ. Âúïðåêè, ÷å äâèæåíèåòî íà êóðñîðà å îáùà îïåðàöèÿ çà òåçè ôóíêöèè, ñïåöèôè÷íîòî åñòåñòâî íà òîâà äâèæåíèå å óíèêàëíî ïðè âñÿêà îò òÿõ. moveHome(), êîÿòî å åäèí ñïåöèàëåí ñëó÷àé íà äâèæåíèå íà êóðñîðà, íè äàâà äðóã ïîäîáåí ïðèìåð. Èìåòî moveHome() ïðåäëàãà ïîâå÷å èíôîðìàöèÿ îòêîëêîòî move(). Ïðîãðàìàòà ìîæå äà ñå ïîäîáðè ñ åäíî ñïåöèàëíî èìå íà ôóíêöèÿ

inline Screen&Screen
home(){ return move( 0, 0 ); }

Òîâà îñâîáîæäàâà âòîðàòà è òðåòàòà ôóíêöèÿ çà äâèæåíèå. Îòíîâî òå ìîãàò äà áúäàò ïðåçàðåæäàíè. Êàêòî å ïî-ëåñíî, îáà÷å, òå ìîãàò äà áúäàò îáåäèíåíè â åäèí ïðåäñòàâèòåë ÷ðåç èíèöèàëèçàòîð íà àðãóìåíòà ïî ïîäðàçáèðàíå

move( int, int, char* = 0 );

Íàé-äîáðå å ïðîãðàìèñòúò äà íå ìèñëè, ÷å âñÿêà åçèêîâà õàðàêòåðèñòèêà å ñëåäâàùàòà ïëàíèíà, êîÿòî òðÿáâà äà èçêà÷è. Èçïîëçóâàíåòî íà äàäåíà õàðàêòåðèñòèêà òðÿáâà äà áúäå ïðåäèçâèêàíî îò ëîãèêàòà íà ïðèëîæåíèåòî, à íå ïðîñòî îò ôàêòà, ÷å òàêàâà ñúùåñòâóâà.

Ñâúðçâàíå íà îáðúùåíèå êúì ïðåçàðåäèìà ôóíêöèÿ

Ñèãíàòóðàòà íà ôóíêöèÿòà ðàçãðàíè÷àâà åäèí ïðåäñòàâèòåë îò äðóã ïðè íàáîð îò ïðåçàðåäèìè ôóíêöèè. Íàïðèìåð, åòî ÷åòèðè ðàçëè÷íè ïðåäñòàâèòåëÿ íà print()

extern void print( unsigned int );
extern void print( char* );
extern void print( char );
extern void print( int );

Åäíî îáðúùåíèå êúì ïðåçàðåäèìà ôóíêöèÿ ñå ñâúðçâà ñ ïîäõîäÿù ïðåäñòàâèòåë ïî âðåìå íà ïðîöåñà, íàðå÷åí ñúïîñòàâÿíå íà àðãóìåíòèòå, çà êîéòî ìîæå äà ñå ìèñëè êàòî çà ïðîöåñ íà ðàçðåøàâàíå íà äâóñìèñëèåòî. Ñúïîñòàâÿíåòî íà àðãóìåíòèòå ïðåäèçâèêâà ñðàâíÿâàíå íà ôàêòè÷åñêèòå àðãóìåíòè íà ïîâèêâàíåòî ñ ôîðìàëíèòå àðãóìåíòè íà âñåêè äåêëàðèðàí ïðåäñòàâèòåë.

Ñúùåñòâóâàò òðè âúçìîæíè ðåçóëòàòà îò îáðúùåíèåòî êúì ïðåçàðåäèìà ôóíêöèÿ

1. Óñïåøíî ñúïîñòàâÿíå. Îáðúùåíèåòî ñå ñâúðçâà ñ ïîäõîäÿù ïðåäñòàâèòåë. Íàïðèìåð, íàïðèìåð âñÿêî îò ñëåäíèòå òðè îáðúùåíèÿ êúì print() èìà êàòî ðåçóëòàò ñúïîñòàâÿíå

unsigned a;
print( ‘a’ ); // matches print(char);
print( "a" ); // matches print(char*);
print( a ); // matches print(unsigned);

2. Íåóñïåøíî ñúïîñòàâÿíå. Ôàêòè÷åñêèòå àðãóìåíòè íå ìîãàò äà áúäàò ïîñòàâåíè â ñúîòâåòñòâèå ñ àðãóìåíòèòå íà äåôèíèðàíèòå ïðåäñòàâèòåëè. Âñÿêî îò ñëåäíèòå äâå îáðúùåíèÿ êúì print() èìà êàòî ðåçóëòàò íåóñïåøíî ñúïîñòàâÿíå

int *ip;
SmallInt si; // error no match
print( si )
print( ip ); // error no match

3. Äâóñìèñëåíî ñúïîñòàâÿíå. Ôàêòè÷åñêèòå àðãóìåíòè ìîãàò äà áúäàò ñúïîñòàâåíè ñ ïîâå÷å îò åäèí äåôèíèðàí ïðåäñòàâèòåë. Ñëåäíîòî îáðúùåíèå å åäèí ïðèìåð çà äâóñìèñëèå ïðè ñúïîñòàâÿíåòî, ïîíåæå òàêîâà ìîæå äà áúäå îñúùåñòâåíî ñ âñåêè îò ïðåäñòàâèòåëèòå íà print(), êàòî èçêëþ÷èì òîçè, êîéòî ïîëó÷àâà àðãóìåíò îò òèï char*.

unsigned long u1;
print( u1 ); // error ambiguous

Ñúïîñòàâÿíåòî ìîæå äà áúäå èçâúðøåíî ïî åäèí îò ñëåäíèòå òðè íà÷èíà, â çàâèñèìîñò îò ïðèîðèòåòà:

1. Òî÷íî ñúïîñòàâÿíå. Òèïúò íà ôàêòè÷åñêèòå àðãóìåíòè ñúîòâåòñòâà òî÷íî íà òèïà íà åäèí îò äåôèíèðàíèòå ïðåäñòàâèòåëè. Íàïðèìåð,

extern ff( int );
extern ff( char* );
f( 0 ); // matches
ff( int )0 å îò òèï int. Îáðúùåíèåòî òî÷íî ñúîòâåòñòâà íà ff(int).

2. Ñúïîñòàâÿíå ÷ðåç ïðèëàãàíå íà ñòàíäàðòíè ïðåîáðàçóâàíèÿ. Àêî íå áúäå íàìåðåíî òî÷íî ñúïîñòàâÿíå ñå ïðàâè îïèò äà ñå èçâúðøè ñúïîòàâÿíå ÷ðåç ñòàíäàðòíî ïðåîáðàçóâàíå íà ôàêòè÷åñêèÿ àðãóìåíò. Íàïðèìåð,

class X;
extern ff( X& );
extern ff( char* );
ff( 0 ); // matches
ff(char*)

3. Ñúïîñòàâÿíå ÷ðåç ïðèëàãàíå íà äåôèíèðàíè îò ïîòðåáèòåëÿ ïðåîáðàçóâàíèÿ. Àêî íå áúäå íàìåðåíî òî÷íî ñúïîñòàâÿíå èëè ñòàíäàðòíî ïðåîáðàçóâàíå ñå èçïîëçâàò äåôèíèðàíîòî îò ïîòðåáèòåëÿ. Íàïðèìåð,

class SmallInt
{ operator int();// ...
SmallInt si;
extern ff( char* );
extern ff( int );
ff( si ); // matches
ff(int);

operator int() ñå íàðè÷à îïåðàòîð çà ïðåîáðàçóâàíå. Òîé ïîçâîëÿâà íà êëàñà äà äåôèíèðà ñîáñòâåí íàáîð îò “ñòàíäàðòíè” ïðåîáðàçóâàíèÿ. Ðàçäåë 7.5 ðàçãëåæäà ïîäðîáíî òåçè äåôèíèðàíè îò ïîòðåáèòåëÿ ïðåîáðàçóâàíèÿ.

Îñîáåíîñòè íà òî÷íîòî ñúïîñòàâÿíå

Ôàêòè÷åñêèòå àðãóìåíòè îò òèï char, short è float ñå îáðàáîòâàò êàòî ñïåöèàëåí ñëó÷àé, êàòî ñå ñïàçâà èçèñêâàíåòî çà òî÷íî ñúïîñòàâÿíå. Ïðàâÿò ñå äâà ïðåãëåäà íà íàáîðà îò ïðåçàðåäèìè ôóíêöèè âèíàãè êîãàòî ñúùåñòâóâà ôàêòè÷åñêè àðãóìåíò çà åäíà îò òÿõ.

Ïðè ïúðâèÿ ïðåãëåä ñå ïðàâè îïèò çà òî÷íî ñúïîñòàâÿíå íà àðãóìåíòèòå. Íàïðèìåð,

ff( char );
ff( long );
ff( ‘a’ ); // ff(char)

Ñèìâîëíàòà êîíñòàíòà òî÷íî ñúîòâåòñòâà íà ïðåçàðåäèìèÿ ïðåäñòàâèòåë, êîéòî èìà ôîðìàëåí àðãóìåíò îò òèï char. Òúðñåíåòî íà ñúîòâåòñòâèå ïðèêëþ÷âà.

Àêî ïðè ïúðâèÿ ïðåãëåä íå áúäå íàìåðåíî òî÷íî ñúîòâåòñòâèå ñå èçâúðøâà ñëåäíîòî

- àðãóìåíòè îò òèï char, unsigned char èëè short ñå ïðèâåæäàò êúì òèï int. Àðãóìåíòè îò òèï unsigned short ñå ïðèâåæäàò êúì òèï int àêî ìàøèííèÿ ðàçìåð íà int å ïî-ãîëÿì îò òîçè íà short; èíà÷å ñå ïðâåæäàò êúì òèï unsigned int.

- àðãóìåíòè îò òèï float ñå ïðâåæäàò êúì òèï double.

Ïðè âòîðèÿ ïðåãëåä ñå ïðàâè îïèò çà íàìèðàíå íà òî÷íî ñúîòâåòñòâèå çà àðãóìåíòèòå íà îñíîâàòà íà èçâúðøåíèòå ïðåîáðàçóâàíèÿ. Íàïðèìåð,

ff( int );
ff( short );
ff( long );
ff( ‘a’ );
// ff(int);

Ñèìâîëíàòà êîíñòàíòà òî÷íî ñúîòâåòñòâà íà ïðåçàðåäèìèÿ ïðåäñòàâèòåë, êîéòî èìà ôîðìàëåí àðãóìåíò îò òèï int. Ñúïîñòàâÿíåòî íà íÿêîé îò òèïîâåòå short èëè long èçèñêâà ïðèëàãàíå íà ñòàíäàðòíî ïðåîáðàçóâàíå. Òúðñåíåòî íà ñúîòâåòñòâèå ïðèêëþ÷âà.

Åäèí ôàêòè÷åñêè àðãóìåíò îò òèï int íå ñå ñúïîñòàâÿ òî÷íî íà ôîðìàëíè àðãóìåíòè îò òèï char èëè short. Ñúîòâåòíî double íå ñúîòâåòñòâóâà òî÷íî íà àðãóìåíò îò òèï float. Íàïðèìåð, äàäåíà å ñëåäíàòà äâîéêà îò ïðåçàðåäèìè ôóíêöèè,

ff( long );
ff( float );

ïðè êîèòî ñëåäíîòî îáðúùåíèå ïðåäèçâèêâà äâóñìèñëèå

ff( 3.14 ); // error ambiguous


Ñòðàíèöè: «1 2 3 4 5 6 7 »

Ðåãèñòðèðàéòå ñå, çà äà äîáàâèòå êîìåíòàð

ðåêëàìà

© Âñè÷êè ïðàâà çàïàçåíè. 2006-2008. Created by: Site.bg
Ïðåïîðú÷âàìå: IT Íîâèíè | Êèíî è èãðè | Äèïëîìà.áã | Paparak.bg | Òóíèíã Ïîðòàë | uchenik.com | TRAVEL òóðèçúì | Ðåôåðàòè | AmAm.bg | Èäå.ëè | Êóðñîâè ðàáîòè | AnimeS-bg.com | Ôîòî Ôîðóì | Çàïîçíàíñòâà | Ìðåæà îò ïðèÿòåëè | IT Light | Spodeli.net | Ôîòî-Êóëò | IDG.BG | Teenproblem.net | Áëîã - Îáðàçîâàíèå | Fresh-BG.com | Hanovete.com | Bulfleet.com | Mythlands.com | Ohoboho.com | Êàçàíëúê.Com | News24 | Setcom.bg | Atol.bg | Elmaz.com | MobileBulgaria.com