WideStudio/MWT Logo
WideStudio/MWT
Programming Guide
WideStudio/MWT Index
Table of contents


특정한 객체 클래스의 포인터를 취득하기에는

특정한 클래스의 API에 접근(access)할 경우, 그 클래스의 포인터여야 합니다. 따라서 어떤 방법으로서 그 클래스형의 포인터를 취득해있서야합니다. 여기서는 그 클래스형 포인터의 취득 방법을 설명합니다. WSCbase::cast() 멤버 함수에의한 클래스 포인터의 취득을 설명합니다. object 가 WSCvtoggle 클래스의 객체로, 토글의 선택상태를 알아차릴 WSCvtoggle 의 멤버 함수 setStatus() 에 접근(access)할 경우의 예입니다.

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  클래스를 계승하는 클래스다!
  }


}

서로다른 클래스의 복수의 객체/ 클래스에 걸쳐서 사용되는 이벤트 프로시저에 있어서, 클래스를 판별하는데 별리합니다.

Document Release 3.90 for WideStudio/MWT ver 3.90, Jul 2005


WideStudio/MWT documents index | Table of contents

Copyright(C) WideStudio/MWT Development Team, 1999-2005 Last modified: Jul 31, 2005