다음을 통해 공유


선언이 일치 합니다.

동일한 범위에서 이름이 같은 모든 두 개의 함수 선언 동일한 기능 또는 오버 로드 된 두 개의 개별 함수를 참조할 수 있습니다.(이전 섹션에서 설명 하는 대로) 인수 하는 것과 같은 종류의 선언을 포함 인수 목록이 경우 함수 선언이 동일한 함수를 참조 하십시오.그렇지 않으면 두 오버 로드를 사용 하 여 선택 된 두 개의 서로 다른 함수에 참조 합니다.

클래스 범위 엄격 하 게 관찰 됩니다. 따라서 기본 클래스에 선언 된 함수 함수와 같은 범위에서 파생 된 클래스에서 선언 되지 않았습니다.파생된 클래스의 함수에서 기본 클래스와 같은 이름을 가진 선언 되 면 파생 클래스 함수는 기본 클래스 함수를 오버 로드를 발생 시키는 대신 숨깁니다.

블록 범위 엄격 하 게 관찰 됩니다. 따라서 파일 범위에서 선언 된 함수는 함수와 같은 범위에 로컬로 선언 되지 않았습니다.로컬로 선언 된 함수는 파일 범위에서 선언 된 함수 이름이 같은 경우 로컬로 선언 된 함수 오버 로드를 발생 시키는 대신 파일 범위가 함수를 숨깁니다.예를 들면 다음과 같습니다.

// 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 멤버 함수가 고 클래스의 private 멤버에 액세스할.

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

참고 항목

참조

오버 로드