共用方式為


宣告對應

任何兩個函式的宣告在相同範圍中相同的名稱可以參考相同的函式,或是兩個不連續的函式多載。如果引數清單的宣告 (如前一節所述),包含相等的型別引數,,函式宣告指向相同的函式。否則,它們會參考已選取 [使用多載的兩個不同函式。

嚴格遵守類別範圍。 因此,基底類別中宣告的函式不在相同的範圍,做為函式宣告衍生類別中。如果在衍生類別中的函式宣告具有相同的名稱,做為基底類別中的函式,衍生類別函式會隱藏基底類別函式,而非造成多載。

嚴格遵守區塊範圍; 因此,在檔案範圍中宣告的函式是不做為函式與相同範圍中區域宣告。如果在本機宣告的函式同名的檔案範圍中宣告的函式,在本機宣告的函式會隱藏檔案範圍函數而非造成多載化。例如:

// 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" );
}

上述程式碼顯示這兩個定義函式從func。使用型別引數定義char *的本機main因為extern陳述式。因此,使用型別引數定義int處於隱藏狀態,以及第一次呼叫func有誤。

對於多載的成員函式,函式的不同版本可接受不同的存取權限。它們仍會被認為是封入類別的範圍內,因此會多載函式。請考慮下列的程式碼,在其中的成員函式Deposit多載。 一種版本是公用的其他的私用。

本範例的用意是為了提供Account的正確的密碼,才能執行存款的類別。這就是使用多載化的完成。

請注意,呼叫Deposit在Account::Deposit呼叫私用成員函式。這個呼叫是否正確因為Account::Deposit成員函式,因此可以存取類別的私用成員。

// 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;
}

請參閱

參考

多載化