- 가상함수
bretta.ViewAcct (); // BacnkAccount::ViewAcct ()를 사용
ophelia.ViewAcct (); // Oberdraft::ViewAcct ()를 사용
bp->ViewAcct (); // BackAccount::ViewAcct ()를 사용
bp->ViewAcct (); // 헉! 어느 버전을 사용하지?
여기서 컴파일러가 포인터형을 사용한다면 마지막 명령문은 BackAccount::ViewAcct ()를 호출하겠지만 포인터가 지시하는 객체의 데이터 형을 사용한다면Overdraft::ViewAcct ()를 호출할 것이다. 그렇다면 컴파일러는 어떤 선택을 할것인가? [[BR]]
기본적으로 C++는 포인터나 참조의 데이터형을 사용하여 사용할 함수를 결정하고 지시되거나 참조된 대상 객체의 데이터형을 무시한다. 그러므로 앞의 예에서 프로그램은 BackAccount::ViewAcct ()를 사용할 것이다. 이렇게 하는 이유는 분명하다. 컴파일러가 데이터형을 모르는 경우가 많기 때문이다. 예를 들어..
bp->ViewAcct ();
bp->ViewAcct (); // BackAccount::ViewAcct ()를 사용
Overdraft 객체에 BackAccount::ViewAcct ()를 사용해도 문제될 것은 없고 다만 일부 테이터가 출력되지 않을 뿐이다. 그렇다면 bp->ViewAcct ()를 포인터형 객체형에 결합하여 Overdraft::ViewAcct ()를 호출할 수 있으면 좋을 것이다. C++는 이 목표를 달성하기 위해 late binding 또는 dynamic binding이라는 것을 제공한다. 이 것에서는 컴파일러가 사용할 클래스 메서드를 결정하지 않고 프로그램 실행 시간에 메서드 함수 호출을 실제로 수행할 때마다 사용할 클래스 메서드를 결정하게 한다. 이 것을 사용하면 참조나 포인터가 지시하는 객체의 형에 따라 메서드를 선택할 수 있다.[[BR]]
bp->ViewAcct (); // BackAccount::ViewAcct ()를 사용
bp->ViewAcct (); // Overdraft::ViewAcct ()를 사용
Found 1 matching page out of 7540 total pages
You can also click here to search title.