| Programming Guide | WideStudio/MWT Index Table of contents |
특정한 객체 클래스의 포인터를 취득하기에는
특정한 클래스의 API에 접근(access)할 경우, 그 클래스의 포인터여야 합니다. 따라서 어떤 방법으로서 그 클래스형의 포인터를 취득해있서야합니다. 여기서는 그 클래스형 포인터의 취득 방법을 설명합니다.WSCbase::cast() 멤버 함수에의한 클래스 포인터의 취득을 설명합니다. object 가 WSCvtoggle 클래스의 객체로, 토글의 선택상태를 알아차릴 WSCvtoggle 의 멤버 함수 setStatus() 에 접근(access)할 경우의 예입니다.
- WSCbase 클래스의 cast() 멤버 함수에의한 취득
클래스 포인터 취득API 기능 void* WSCbase::cast(char* className) 지정된 클래스명의 포인터값을 돌립니다.
C++ 언어에서는 보통, 파생원에로의 형변환은 가능하나, 파생원에서, 파생 클래스에로의 형변환은 지원되지안습니다.WSCbase 클래스의 cast() 함수 는,그 기능을 보관합니다.#include <WSCvtoggle.h> //WSCvtoggle 클래스를 직접 접근(access)하기에. ... void cbop(WSCbase* object){ //WSCvtoggle 클래스의 getStatus() 함수에대한 접근(access)(1) WSCvtoggle* tgl = (WSCvtoggle*)object->cast("WSCvtoggle"); if (tgl == NULL){ //object 가,WSCvtoggle 클래스의 인스턴스가아니므로 형변환에 실패. }else{ //object 가,WSCvtoggle 클래스의 인스턴스이므로 형변환에 성공. WSCbool status = tgl->getStatus(); } }cast() 함수는 인스턴스가 가지는 모든 계승 클래스의 포인터를 취득 할수 있습니다.
그러나, 계승에 보함되지안은 형을 지정하면 NULL 가 돌아옵니다. 이 기능을 바로 사용하며는, 다음의 이벤트 프로시저처럼 클래스의 판별에 응용할수 있습니다..#include <WSCvbtn.h> //WSCvbtn 클래스에 직접 접근(access)하기에. #include <WSCvtoggle.h> //WSCvtoggle 클래스에 직접 접근(access)하기에. ... void cbop(WSCbase* object){ //WSCvbtn 클래스를 계승하는 클래스의 객체를 판별 WSCvbtn* btn = (WSCvbtn*)object->cast("WSCvbtn"); //WSCvtoggle 클래스를 계승하는 클래스의 객체를 판별 WSCvtoggle* toggle = (WSCvtoggle*)object->cast("WSCvtoggle"); if (btn == NULL){ //WSCvbtn 클래스와 아무 관계없는 클래스의 객체다! }else{ //WSCvbtn 클래스가아니면 WSCvbtn 클래스를 계승하는 클래스다! } if (toggle == NULL){ //WSCvtoggle 클래스와 아무 관계없는 클래스의 객체다! }else{ //WSCvtoggle 클래스가아니면 WSCvtoggle 클래스를 계승하는 클래스다! } }서로다른 클래스의 복수의 객체/ 클래스에 걸쳐서 사용되는 이벤트 프로시저에 있어서, 클래스를 판별하는데 별리합니다.
| Copyright(C) WideStudio/MWT Development Team, 1999-2005 | Last modified: Jul 31, 2005 |