Odpovídající prohlášení
Jakékoli prohlášení dvě funkce se stejným názvem ve stejném oboru může odkazovat na stejnou funkci nebo na dvě samostatné funkce, které jsou přetížené.Pokud argument seznamy prohlášení obsahovat argumenty ekvivalentní typy (popsané v předchozí části), deklarace funkce odkazují na stejnou funkci.V opačném případě se odkazují na dva různé funkce, které jsou vybrány pomocí přetížení.
Třída oboru přísně dodržovány; Proto funkce deklarované v základní třídě není ve stejném oboru jako funkce deklarována v odvozené třídě.Pokud je funkce v odvozené třídě deklarována s stejný název jako funkce v základní třídě, skryje funkce odvozené třídy základní třída funkce namísto způsobující přetížení.
Rozsah blok přísně dodržovány; Proto funkce deklarované v souboru oboru není ve stejném oboru jako funkce deklarována místně.Pokud místně deklarované funkce má stejný název jako funkce deklarované v souboru oboru, skryje místně deklarované funkce funkce rozsahem souboru namísto způsobující přetížení.Příklad:
// declaration_matching1.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
void func( int i )
{
cout << "Called file-scoped func : " << i << endl;
}
void func( char *sz )
{
cout << "Called locally declared func : " << sz << endl;
}
int main()
{
// Declare func local to main.
extern void func( char *sz );
func( 3 ); // C2664 Error. func( int ) is hidden.
func( "s" );
}
Předcházející kód ukazuje dvě definice z funkce func.Definice, která trvá argument typu char * místní main z důvodu extern prohlášení.Proto definici, která trvá argument typu int je skrytý a první volání func došlo k chybě.
Pro přetížené členské funkce mohou různé verze funkce uveden různých přístupových oprávnění.Tyto jsou stále považovány za obor ohraničující třídy a jsou tedy přetížené funkce.Zvažte následující kód, ve kterém členské funkce Deposit přetížení. jedna verze je veřejné, jiné, soukromé.
Tento vzorek se záměrem je poskytnout Account třídy, ve které je vyžadováno heslo správné provedení vkladů.Toho dosáhnete pomocí přetížení.
Všimněte si, že volání Deposit v Account::Deposit volá funkci soukromý člen.Toto volání je správný protože Account::Deposit je členské funkce, a proto má přístup k soukromým členové třídy.
// declaration_matching2.cpp
class Account
{
public:
Account()
{
}
double Deposit( double dAmount, char *szPassword );
private:
double Deposit( double dAmount )
{
return 0.0;
}
int Validate( char *szPassword )
{
return 0;
}
};
int main()
{
// Allocate a new object of type Account.
Account *pAcct = new Account;
// Deposit $57.22. Error: calls a private function.
// pAcct->Deposit( 57.22 );
// Deposit $57.22 and supply a password. OK: calls a
// public function.
pAcct->Deposit( 52.77, "pswd" );
}
double Account::Deposit( double dAmount, char *szPassword )
{
if ( Validate( szPassword ) )
return Deposit( dAmount );
else
return 0.0;
}