Aracılığıyla paylaş


Bildirim eşleştirme

Herhangi bir yerine aynı kapsamda aynı adla iki işlev bildirimleri aynı işlevi veya aşırı yüklenmiş olan iki ayrı işlev başvuru yapabilirsiniz.Bağımsız değişken olarak listeleniyorsa (önceki alt bölümde açıklandığı gibi) eşdeğer türler bağımsız değişkenleri bildirimleri içeren, aynı işlevi işlev bildirimleri bakın.Aksi takdirde, aşırı kullanarak seçilen iki farklı işlevlere başvurur.

Sınıf kapsamı kesinlikle gözlenen; Bu nedenle, temel bir sınıf içinde bildirilen bir işlev bir işlev ile aynı kapsamda türetilmiş bir sınıf içinde bildirilmedi.Türetilmiş bir sınıf içinde bir işlev ile aynı adı taşıyan işlevi temel sınıfta bildirilirse, türetilmiş sınıf işlevi aşırı neden yerine temel sınıf işlevi gizler.

Bloğun kapsamına kesinlikle gözlenen; Bu nedenle, dosya kapsamı içinde bildirilen bir işlev bir işlev ile aynı kapsamda yerel bildirilmedi.Yerel olarak bildirilen bir işlev dosya kapsamı içinde bildirilen bir işlev olarak aynı adı taşıyorsa, yerel olarak bildirilen işlevi aşırı neden yerine dosya kapsamına işlevi gizler.Örne?in:

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

Yukarıdaki kod iki işlev tanımlarını gösterir func.Türünde bir bağımsız değişken alır tanımını char * için yerel olarak main nedeniyle extern ifadesi.Bu nedenle, türünde bir bağımsız değişken alır tanımını int gizlidir ve ilk çağrısı func hata.

Aşırı yüklü üye işlevler için işlevin farklı sürümleri farklı erişim izinleri verilebilir.Bunlar kapsayan sınıf kapsamı içinde olarak değerlendirilir ve bu nedenle aşırı yüklü işlevlerdir.Aşağıdaki kod, düşünün üye işlev Deposit aşırı; bir sürüm ortak, diğer, özel.

Bu örnek amacı sağlamaktır bir Account sınıf mevduat gerçekleştirmek için doğru parola içinde gereklidir.Bu aşırı kullanılarak gerçekleştirilir.

Dikkat edin çağrısı Deposit , Account::Deposit özel üye işlevini çağırır.Bu çağrı doğrudur çünkü Account::Deposit üye işlevi ve bu nedenle sınıfın özel üyelerine erişimi vardır.

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

Ayrıca bkz.

Başvuru

Aşırı