선언이 일치 합니다.
동일한 범위에서 이름이 같은 모든 두 개의 함수 선언 동일한 기능 또는 오버 로드 된 두 개의 개별 함수를 참조할 수 있습니다.(이전 섹션에서 설명 하는 대로) 인수 하는 것과 같은 종류의 선언을 포함 인수 목록이 경우 함수 선언이 동일한 함수를 참조 하십시오.그렇지 않으면 두 오버 로드를 사용 하 여 선택 된 두 개의 서로 다른 함수에 참조 합니다.
클래스 범위 엄격 하 게 관찰 됩니다. 따라서 기본 클래스에 선언 된 함수 함수와 같은 범위에서 파생 된 클래스에서 선언 되지 않았습니다.파생된 클래스의 함수에서 기본 클래스와 같은 이름을 가진 선언 되 면 파생 클래스 함수는 기본 클래스 함수를 오버 로드를 발생 시키는 대신 숨깁니다.
블록 범위 엄격 하 게 관찰 됩니다. 따라서 파일 범위에서 선언 된 함수는 함수와 같은 범위에 로컬로 선언 되지 않았습니다.로컬로 선언 된 함수는 파일 범위에서 선언 된 함수 이름이 같은 경우 로컬로 선언 된 함수 오버 로드를 발생 시키는 대신 파일 범위가 함수를 숨깁니다.예를 들면 다음과 같습니다.
// 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;
}