C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[23985] Re:2번은 제 실수로난 오타(?)성입니다... Re:Re:C++ Builder 의 다중상속에서?
임문환 [mhlim] 916 읽음    2003-02-01 06:26
"하여간 1번 빈 클래스에 대해서는 C++ Builder가 지원하지 않는 방식이라는것이죠?"라고 질문하셨는데 전 그렇게 대답한 적이 없습니다.

1. 빈 클래스도 얼마든지 가능합니다.

2. 클래스의 내부에서가 아닌 외부에서 해당 클래스의 맴버(변수/매서드)에 액세스할 수 있으려면 해당하는 맴버가 public 영역에 선언되어 있어야 한다는 것입니다.
이 규칙은 동일 클래스의 다른 인스턴스에 대해서도 적용됨.
(단, 자식 클래스의 경우 부모클래스의 protected 영역에도 액세스 가능.
     friend 클래스나 매서드의 경우 모든 맴버 액세스 가능)

3. C++에서 class, struct, union의 맴버들에 액세스 지정자(public , protected, private)가 지정되어 있지 않은 경우, 그게 class라면 private가 되고 struct또는 union이면 public이 됩니다.
예를 들어,
class SomeClass
{
  int i;
};
에서 i는 private입니다.


4. 혹시나해서 말씀드리면
클래스 선언시 블럭의 끝에는 반드시 세미콜론(;)이 있어야 합니다.
다음과 같이 말입니다.
class SomeClass
{
  //각종 영역들과 선언들
};


마지막으로
23978번 답변에 제가 제시한 코드로도 오류가 발생하는지 테스트해보시기 바랍니다.


한동희 님이 쓰신 글 :
: TPureVirtualMethodClass를 받도록 제가 썼어야 하는데 글을 쓰다가 제가 실수한 거로군요. ^^;
: 하여간 1번 빈 클래스에 대해서는 C++ Builder가 지원하지 않는 방식이라는것이죠?
:
: 임문환 님이 쓰신 글 :
: :
: : 님의 코드의 문제점은
: : 1. 외부에서 클래스의 매서드를 사용하려 하면서도 public 영역에 매서드가 없고.
: : 2. TPureVirtualFunctionCallErrorClass 클래스의 경우 TPureVirtualMethodClass를 상속받지 않은 상태에서 TPureVirtualMethodClass의 CanDeleteSomeMember 순수가상함수를 오버라이딩하려했습니다.
: :
: :
: : //아래와 같이 해보니 아무 오류가 안 나네요.
: :
: :
: : class TNormalClass
: : {
: :  public:
: :   char * __fastcall func1()
: :   {
: :    return "TNormalClass";
: :   }
: : };
: :
: : class TEmptyClass
: : {
: : // nothing here
: : };
: :
: : class TPureVirtualMethodClass
: : {
: :   virtual bool __fastcall CanDeleteSomeMember() = 0;
: : };
: :
: : // 컴파일시 알 수 없는 오류코드가 나는 클래스
: : class TUnknownErrorClass : public TNormalClass, public TEmptyClass
: : {
: : };
: :
: : // 런타임시 pure virtual function call 에러가 나는 클래스
: : class TPureVirtualFunctionCallErrorClass : public TNormalClass, public TEmptyClass,public TPureVirtualMethodClass
: : {
: :  public:
: :   virtual bool __fastcall CanDeleteSomeMember() { return true; }
: : };
: :
: :
: : //인스턴스 생성 및 호출
: :  TPureVirtualFunctionCallErrorClass ErrorClass;
: :  ShowMessage(ErrorClass.CanDeleteSomeMember()?"true":"false");
: :  TUnknownErrorClass uec;
: :  ShowMessage(uec.func1());
: :
: :
: :
: : 한동희 님이 쓰신 글 :
: : : 다중상속을 이용해 코딩을 하다보니 두 가지 문제가 생겼습니다.
: : :
: : : 하나는 멤버가 전혀 없는 빈 클래스를 다중 상속 받은 경우 알 수 없는 에러가 났고
: : :
: : : 또 하나는 순수 가상 함수를 가진 클래스를 다중 상속 받은 경우 그 함수를 아래 클래스에서
: : :
: : : 재정의 했는데도 런타임에서 pure virtual function call에러가 나더군요.
: : :
: : : 예를들어
: : :
: : : class TNormalClass
: : : {
: : : ....
: : : }
: : :
: : : class TEmptyClass
: : : {
: : : // nothing here
: : : }
: : :
: : : class TPureVirtualMethodClass
: : : {
: : :   virtual bool __fastcall CanDeleteSomeMember() = 0;
: : : }
: : :
: : : // 컴파일시 알 수 없는 오류코드가 나는 클래스
: : : class TUnknownErrorClass : public TNormalClass, public TEmptyClass { ... }
: : :
: : : // 런타임시 pure virtual function call 에러가 나는 클래스
: : : class TPureVirtualFunctionCallErrorClass : public TNormalClass, public TEmptyClass
: : : {
: : :   virtual bool __fastcall CanDeleteSomeMember() { return true; }
: : : }
: : : TPureVirtualFunctionCallErrorClass ErrorClass;
: : : ErrorClass.CanDeleteSomeMember() => ERROR!!
: : :
: : : 혹시 이것에 대해 아시는분 계시지요?
: : :
: : :

+ -

관련 글 리스트
23970 C++ Builder 의 다중상속에서? 한동희 1040 2003/01/30
23978     Re:C++ Builder 의 다중상속에서? 임문환 1277 2003/01/30
23982         2번은 제 실수로난 오타(?)성입니다... Re:Re:C++ Builder 의 다중상속에서? 한동희 748 2003/01/31
23985             Re:2번은 제 실수로난 오타(?)성입니다... Re:Re:C++ Builder 의 다중상속에서? 임문환 916 2003/02/01
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.