다른 포인터에서 하나의 기본 클래스에 대한 다중 상속 및 일반 액세스

Iwbnwif

내 질문은 "다른 하위 클래스를 처리하지만 두 기본 클래스의 메서드에 액세스하는 일반 함수를 어떻게 구현할 수 있습니까?"입니다.

다음과 같이 구성된 가상 그래픽 라이브러리를 사용하고 있다고 상상해보십시오.

class Shape
{

// getters and setters are here

private:
   int m_BorderColor;
   int m_FillColor;
}

class Square : public Shape
{

}

class Triangle : public Shape
{

}

class TextBox : public Shape
{

}

... 등등.

라이브러리는 Shape 기본 클래스의 파생물 만 가상 캔버스에 추가 할 수 있습니다. 내 응용 프로그램에서 나는 각각의 모든 모양과 가능한 다른 속성에 텍스트 상자를 갖고 싶습니다.

따라서 다음과 같은 자체 기본 클래스를 갖고 싶습니다.

class MyBase
{
public:
    SetText (string text) { m_Text.Text = text; }
    // other getters and setters here

private:
    TextBox m_Text;
    int m_Id;
}

그런 다음 다음과 같은 텍스트 상자가있는 '내'모양을 가질 수 있습니다.

class MySquare : public Square, public MyBase
{

}

MySquare는 Shape의 하위 클래스이기 때문에 캔버스에 추가 할 수 있습니다. 사용자가 MySquare (또는 MyTriangle 등)를 두 번 클릭하면 텍스트를 변경하고 싶습니다. 하지만 런타임에 클릭 한 모양 만 알고 있습니다.

다음은 SetText가 Shape의 구성원이 아니고 라이브러리에서받은 포인터가 MyTriangle에 대한 포인터가 Shape에 캐스팅되기 때문에 분명히 작동하지 않습니다.

// double click handler
Shape* clicked_shape = clickEvent.GetShape();
clicked_shape->SetText("Foo");

런타임까지 어떤 모양 개체를 얻고 있는지 모르기 때문에 기본 클래스 포인터를 사용해야합니다. 따라서 다음은 잘 작동하지만 나에게는 유용하지 않습니다.

// double click handler
Shape* clicked_shape = clickEvent.GetShape()
((MyTriangle*)clicked_shape)->SetText("Foo")

이 문제에 대한 통찰력이나 더 나은 패턴에 감사드립니다!

앨런 스톡스

이건 어때?

MyBase * base = dynamic_cast<MyBase *>(clicked_shape);
base->SetText("too");

base얻는 Shape가 실제로 귀하의 것이 아닌 경우 null인지 확인하고 싶을 수 있습니다 .

MyBase 이를 위해 적어도 하나의 가상 기능이 필요합니다-소멸자는 할 것입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

다중 상속 및 템플릿을 사용하여 기본 클래스의 멤버에 액세스

분류에서Dev

하나의 쿼리로 기본 클래스 및 상속 클래스에 대한 문서 가져 오기

분류에서Dev

레일 4 외래 키의 루비 및 다른 테이블의 속성에 액세스하기위한 연결

분류에서Dev

C ++ 클래스 보유 및 다른 클래스에 대한 포인터 반환

분류에서Dev

제한된 AppDomain의 C # 클래스는 기본 AppDomain에있는 다른 클래스에서 상속합니다.

분류에서Dev

한 클래스 파일에서 다른 클래스 파일에 액세스하기

분류에서Dev

상호 작용하는 두 클래스에 대한 가변 템플릿 기반 다중 상속 ...

분류에서Dev

상호 작용하는 두 클래스에 대한 가변 템플릿 기반 다중 상속 ...

분류에서Dev

C ++ 상속 : 기본 클래스에 대한 파생 클래스 포인터가 파생 클래스 메서드를 호출합니다.

분류에서Dev

deleteLater () 메서드에 대한 액세스로 인한 QObject의 다중 상속

분류에서Dev

다른 클래스의 정적 속성 및 정적 상수에 동적으로 액세스하는 방법

분류에서Dev

다른 추상 및 비추 상 클래스에 의한 추상 클래스 상속

분류에서Dev

다른 클래스의 콤보 상자에서 설정 액세스 및 저장

분류에서Dev

Django 앱에서 하나의 키워드 기반 데이터 세트에 대한 다중 로그인 액세스 권한을 부여하는 방법

분류에서Dev

kotlin의 다른 클래스 파일에서 텍스트보기에 액세스

분류에서Dev

여러 클래스가 다른 클래스의 동일한 인스턴스에 액세스해야합니다.

분류에서Dev

C # 다른 클래스의 변수에 대한 앱 액세스?

분류에서Dev

추상 기본 클래스에서 다른 기본 클래스 멤버에 액세스

분류에서Dev

동일한 인터페이스에서 상속 된 다중 클래스 autofac

분류에서Dev

다른 파일의 동일한 클래스에서 함수에 액세스

분류에서Dev

제네릭 메서드에서 형식 인수로 사용중인 클래스의 기본 클래스 속성에 액세스 할 수 없습니다.

분류에서Dev

기본 추상 클래스 및 IDisposable의 올바른 위치에서 인터페이스 상속

분류에서Dev

실행 중 다른 프로그램 및 사용자의 특정 파일에 대한 액세스 제한

분류에서Dev

Python-기본 스크립트에서 var에 액세스하는 다른 파일의 클래스 인스턴스

분류에서Dev

신속하게 다른 클래스의 변수에 액세스

분류에서Dev

다른 클래스 내의 다른 클래스에 대한 C ++ 포인터

분류에서Dev

중첩 템플릿에서 클래스 멤버 포인터를 사용하면 GCC 오류 "불일치 유형 자식 및 기본"이 발생합니다.

분류에서Dev

C ++ : 새 기본 클래스이지만 파생 클래스의 속성에 액세스 할 수 있습니다.

분류에서Dev

Kotlin에서 동일한 클래스의 다른 인스턴스 필드에 액세스

Related 관련 기사

  1. 1

    다중 상속 및 템플릿을 사용하여 기본 클래스의 멤버에 액세스

  2. 2

    하나의 쿼리로 기본 클래스 및 상속 클래스에 대한 문서 가져 오기

  3. 3

    레일 4 외래 키의 루비 및 다른 테이블의 속성에 액세스하기위한 연결

  4. 4

    C ++ 클래스 보유 및 다른 클래스에 대한 포인터 반환

  5. 5

    제한된 AppDomain의 C # 클래스는 기본 AppDomain에있는 다른 클래스에서 상속합니다.

  6. 6

    한 클래스 파일에서 다른 클래스 파일에 액세스하기

  7. 7

    상호 작용하는 두 클래스에 대한 가변 템플릿 기반 다중 상속 ...

  8. 8

    상호 작용하는 두 클래스에 대한 가변 템플릿 기반 다중 상속 ...

  9. 9

    C ++ 상속 : 기본 클래스에 대한 파생 클래스 포인터가 파생 클래스 메서드를 호출합니다.

  10. 10

    deleteLater () 메서드에 대한 액세스로 인한 QObject의 다중 상속

  11. 11

    다른 클래스의 정적 속성 및 정적 상수에 동적으로 액세스하는 방법

  12. 12

    다른 추상 및 비추 상 클래스에 의한 추상 클래스 상속

  13. 13

    다른 클래스의 콤보 상자에서 설정 액세스 및 저장

  14. 14

    Django 앱에서 하나의 키워드 기반 데이터 세트에 대한 다중 로그인 액세스 권한을 부여하는 방법

  15. 15

    kotlin의 다른 클래스 파일에서 텍스트보기에 액세스

  16. 16

    여러 클래스가 다른 클래스의 동일한 인스턴스에 액세스해야합니다.

  17. 17

    C # 다른 클래스의 변수에 대한 앱 액세스?

  18. 18

    추상 기본 클래스에서 다른 기본 클래스 멤버에 액세스

  19. 19

    동일한 인터페이스에서 상속 된 다중 클래스 autofac

  20. 20

    다른 파일의 동일한 클래스에서 함수에 액세스

  21. 21

    제네릭 메서드에서 형식 인수로 사용중인 클래스의 기본 클래스 속성에 액세스 할 수 없습니다.

  22. 22

    기본 추상 클래스 및 IDisposable의 올바른 위치에서 인터페이스 상속

  23. 23

    실행 중 다른 프로그램 및 사용자의 특정 파일에 대한 액세스 제한

  24. 24

    Python-기본 스크립트에서 var에 액세스하는 다른 파일의 클래스 인스턴스

  25. 25

    신속하게 다른 클래스의 변수에 액세스

  26. 26

    다른 클래스 내의 다른 클래스에 대한 C ++ 포인터

  27. 27

    중첩 템플릿에서 클래스 멤버 포인터를 사용하면 GCC 오류 "불일치 유형 자식 및 기본"이 발생합니다.

  28. 28

    C ++ : 새 기본 클래스이지만 파생 클래스의 속성에 액세스 할 수 있습니다.

  29. 29

    Kotlin에서 동일한 클래스의 다른 인스턴스 필드에 액세스

뜨겁다태그

보관